Nền tảng
Phạm vi sản phẩm và ranh giới giữa các module
Alliance App gồm ba module Chat, Task và Bán hàng. Bài này xác định mỗi module sở hữu dữ liệu gì, không được đụng vào cái gì, và nói chuyện với nhau qua đường nào.
Nội dung bài
Thuật ngữ trong bài (3)
Vì sao phải vẽ ranh giới ngay từ đầu
Ba module trong một ứng dụng, nếu để chúng gọi thẳng vào nhau thoải mái, sau sáu tháng sẽ thành một khối không tách nổi: sửa nút gửi tin nhắn làm hỏng màn hình đơn hàng, và không ai giải thích được vì sao. Ranh giới vẽ sớm thì gần như miễn phí. Vẽ muộn thì phải đập đi làm lại.
Mỗi module sở hữu cái gì
| Module | Sở hữu dữ liệu | Chịu trách nhiệm về | Ràng buộc khó nhất |
|---|---|---|---|
| Chat | Cuộc trò chuyện, tin nhắn, trạng thái đã đọc, thành viên nhóm | Gửi nhận thời gian thực, lịch sử tin nhắn | Độ trễ, thứ tự tin nhắn, mạng chập chờn |
| Task | Công việc, trạng thái, người nhận, hạn, bình luận | Giao việc, theo dõi, nhắc hạn | Phân quyền, tính nhất quán trạng thái |
| Bán hàng | Đơn hàng, sản phẩm, thanh toán, doanh số | Tạo và chốt đơn, đối soát | Tính đúng đắn của tiền, chống trùng, dấu vết |
Ngoài ba module là phần nền chung: tài khoản, phân quyền, thông báo đẩy, tải tệp, đồng bộ ngoại tuyến. Nền chung không thuộc về module nào — nó có người sở hữu riêng, và mọi thay đổi trong đó phải được báo cho cả ba module trước khi làm.
Luật ranh giới
- Không module nào đọc thẳng bảng dữ liệu của module khác. Cần dữ liệu thì gọi qua giao diện công khai mà module kia cung cấp.
- Không truyền kiểu dữ liệu nội bộ qua ranh giới. Chat gửi sang Task một mã công việc và một nhãn hiển thị, không gửi nguyên đối tượng nội bộ của mình.
- Mỗi giao diện công khai đều có chủ. Đổi nó thì phải báo trước, không đổi lặng lẽ.
- Nền chung không được biết gì về module. Nếu phần tài khoản có branch
if (module === "ban-hang")thì đó là dấu hiệu ranh giới đã thủng.
Những điểm ba module chạm nhau
Đây là nơi lỗi hay sinh ra nhất, nên liệt kê rõ để ai cũng biết mà cẩn thận:
| Điểm chạm | Mô tả | Ai chịu trách nhiệm |
|---|---|---|
| Gắn cuộc trò chuyện vào công việc | Task hiển thị một luồng chat gắn với công việc | Chủ module Task, dùng giao diện Chat cung cấp |
| Trao đổi trong đơn hàng | Bán hàng mở luồng chat với khách | Chủ module Bán hàng |
| Tạo việc từ đơn hàng | Đơn mới sinh ra công việc giao hàng | Thoả thuận giữa hai chủ module, ghi thành quyết định |
| Thông báo đẩy | Cả ba module đều bắn thông báo | Chủ phần nền chung, module chỉ khai báo nội dung |
| Phân quyền | Ai thấy được gì trong từng module | Chủ phần nền chung |
Bất kỳ việc nào chạm vào các điểm trên đều phải có hai người review: chủ module làm và chủ module bị ảnh hưởng.
Ngoài phạm vi
Ghi rõ thứ không làm cũng quan trọng ngang ghi thứ sẽ làm. Ở giai đoạn hiện tại, những thứ sau nằm ngoài phạm vi, ai muốn đưa vào phải đề xuất và đổi lấy việc khác:
- Gọi thoại và gọi video trong Chat.
- Quy trình duyệt nhiều cấp trong Task.
- Kế toán và xuất hoá đơn trong Bán hàng.
- Bản web dùng song song với bản di động.
Ngoài phạm vi không có nghĩa là không bao giờ làm. Nó có nghĩa là chưa làm, và bất kỳ ai đang viết code cho nó lúc này là đang làm sai việc.
Kiểm tra ranh giới còn nguyên hay không
Mỗi cuối tháng, soát ba câu hỏi:
- Có chỗ nào một module truy cập thẳng dữ liệu của module khác không?
- Có giao diện công khai nào bị đổi mà không báo trước không?
- Có phần nền chung nào phải biết tên module để chạy đúng không?
Câu nào trả lời "có" thì mở một hạng mục sửa, đừng để tới lần soát sau.

