Mở rộng theo câu trả lời của Kilian Foth, hướng xếp lớp này tương ứng với hướng mà con người khám phá một hệ thống.
Hãy tưởng tượng rằng bạn là một nhà phát triển mới được giao nhiệm vụ sửa lỗi trong hệ thống lớp.
Lỗi thường là sự không phù hợp giữa những gì khách hàng cần và những gì anh ta nhận được. Khi khách hàng giao tiếp với hệ thống thông qua UI và nhận được kết quả thông qua UI (UI có nghĩa đen là 'giao diện người dùng'), các lỗi cũng được báo cáo theo giao diện người dùng. Vì vậy, là một nhà phát triển, bạn không có nhiều sự lựa chọn ngoài việc bắt đầu nhìn vào UI, để tìm hiểu điều gì đã xảy ra.
Đó là lý do tại sao có kết nối lớp từ trên xuống là cần thiết. Bây giờ, tại sao chúng ta không có kết nối đi cả hai chiều?
Chà, bạn có ba kịch bản làm thế nào lỗi đó có thể xảy ra.
Nó có thể xảy ra trong chính mã UI và do đó được bản địa hóa ở đó. Điều này thật dễ dàng, bạn chỉ cần tìm một nơi và sửa nó.
Nó có thể xảy ra ở các phần khác của hệ thống do các cuộc gọi được thực hiện từ UI. Khó khăn vừa phải, bạn theo dõi một cây các cuộc gọi, tìm một nơi xảy ra lỗi và sửa nó.
Và nó có thể xảy ra do một cuộc gọi VÀO mã UI của bạn. Cái nào khó, bạn phải bắt cuộc gọi, tìm nguồn của nó, sau đó tìm ra lỗi xảy ra ở đâu. Xem xét rằng một điểm bạn bắt đầu nằm sâu trong một nhánh của cây cuộc gọi, VÀ bạn cần tìm một cây gọi chính xác trước, có thể có một số cuộc gọi vào mã UI, bạn đã gỡ lỗi cho bạn.
Để loại bỏ trường hợp khó nhất có thể, các phụ thuộc vòng tròn được khuyến khích mạnh mẽ, các lớp kết nối chủ yếu theo kiểu từ trên xuống. Ngay cả khi một kết nối theo cách khác là cần thiết, nó thường bị giới hạn và được xác định rõ ràng. Ví dụ, ngay cả với các cuộc gọi lại, là một loại kết nối ngược, mã được gọi trong cuộc gọi lại thường cung cấp cuộc gọi lại này ngay từ đầu, thực hiện một loại "chọn tham gia" cho các kết nối ngược và hạn chế tác động của chúng trong việc hiểu hệ thống.
Layering là một công cụ và chủ yếu nhắm vào các nhà phát triển hỗ trợ một hệ thống hiện có. Vâng, kết nối giữa các lớp cũng phản ánh điều đó.