Theo tôi, chỉ số số một về các mô đun được ghép nối kém là phụ thuộc song phương. Ví dụ, Module1 gọi một số chức năng trong Module2 và Module2 gọi một số chức năng trong Module1.
Hầu hết các giao diện nên đơn hướng. Nếu mô-đun được gọi cần truyền một số thông tin đến mô-đun gọi không được trả lại như một phần của cuộc gọi thì nó nên sử dụng một số loại cơ chế chuyển tin nhắn hoặc cơ chế kích hoạt sự kiện như hàng đợi tin nhắn. Lý tưởng nhất, giao diện xử lý chuyển tin nhắn nên được chuyển qua trong một số quá trình khởi tạo hoặc đăng ký. Điều này hoàn toàn trừu tượng hóa giao diện theo cách mà mô-đun không thực sự quan tâm sự kiện dành cho ai ... do đó nó được tách rời.
Một dấu hiệu khác là khi một mô-đun liên tục gọi một số mô-đun khác cho một số tập dữ liệu cụ thể. Điều này sẽ khiến bạn đặt câu hỏi ai thực sự nên sở hữu tập dữ liệu. Tại sao mô-đun này trong câu hỏi luôn cần phải xem dữ liệu thuộc về một số mô-đun khác?
Một công cụ thứ ba để nói là tự hỏi: "Tôi có thể rút mô-đun này ra và thay thế nó mà không yêu cầu thay đổi các mô-đun khác không.
Đây không phải là một danh sách đầy đủ, nhưng chúng là ba điều hàng đầu tôi tự hỏi khi thiết kế phần mềm.