AllianceProject Handbook
← Knowledge

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.

Cập nhật 12/09/2026phạm vikiến trúcmodule

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ì

ModuleSở hữu dữ liệuChịu trách nhiệm vềRàng buộc khó nhất
ChatCuộc trò chuyện, tin nhắn, trạng thái đã đọc, thành viên nhómGử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
TaskCông việc, trạng thái, người nhận, hạn, bình luậnGiao việc, theo dõi, nhắc hạnPhâ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átTí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

  1. 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.
  2. 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.
  3. 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ẽ.
  4. 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ạmMô tảAi chịu trách nhiệm
Gắn cuộc trò chuyện vào công việcTask hiển thị một luồng chat gắn với công việcChủ module Task, dùng giao diện Chat cung cấp
Trao đổi trong đơn hàngBán hàng mở luồng chat với kháchChủ module Bán hàng
Tạo việc từ đơn hàngĐơn mới sinh ra công việc giao hàngThoả thuận giữa hai chủ module, ghi thành quyết định
Thông báo đẩyCả ba module đều bắn thông báoChủ phần nền chung, module chỉ khai báo nội dung
Phân quyềnAi thấy được gì trong từng moduleChủ 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.