Mọi người thường tuyên bố rằng họ đang theo một kiến trúc '3 tầng (hoặc n tầng), và đôi khi họ tuyên bố sẽ chuyển sang Mô hình miền. Nhưng tôi thực sự chưa bao giờ hiểu "kiến trúc 3 tầng" huyền thoại này là gì. Nó dường như không có định nghĩa chính thức. Trong khi có rất nhiều tài liệu tham khảo và ví dụ xung quanh giải thích và thể hiện mẫu Mô hình miền, mọi tham chiếu đến 3 tầng chỉ đơn giản gợi ý bạn nên tách mã của mình thành các lớp UI, Business Logic và Data Access. Và đó là tất cả những gì họ dường như nói.
Điều tôi thấy đặc biệt kỳ lạ là với tôi, Mô hình miền là hiện thân hoàn hảo của mô hình 3 tầng này. ORM và các tệp ánh xạ là Lớp truy cập dữ liệu, Miền là Logic nghiệp vụ và giao diện người dùng là UI. Vậy tại sao mọi người nói chuyện như thể nó là một cái gì đó mới và khác biệt, và một cái gì đó họ nên chuyển sang?
Trước khi tôi thấy mọi người triển khai Mô hình miền, hầu hết các ứng dụng là UI truy cập các thủ tục được lưu trữ với logic được phân chia trên UI và SP. Đôi khi, có một vài hội đồng được gọi là 'UI', 'BLL' và 'DLL' nhưng thông thường đây chỉ là các trung gian giữa các UI và SP, để lại nhiều chỗ hơn cho logic được lan truyền ngẫu nhiên.
Vậy kiến trúc '3 tầng' huyền thoại này là gì? Nó thực sự thậm chí tồn tại? và nếu vậy, một số ví dụ về nó được thực hiện tốt ở đâu?