Tôi thực sự thích cách làm việc 3 + 1 tầng. Một cấp cho giao diện người dùng, một dành cho logic nghiệp vụ và để lưu trữ dữ liệu. Người cuối cùng bạn nói? Các đối tượng và giao diện miền. Điều này làm cho nó có thể tải lên bất kỳ một hoặc hai trong số các tầng chính cộng với tên miền "tầng" và mã sẽ hoạt động.
Nó dựa chủ yếu vào các nguyên tắc dependency injection và Inversion of Control. Lớp dữ liệu/persistence chỉ có hai điều. Nó tạo, đọc, cập nhật và xóa dữ liệu và ánh xạ nó tới định dạng đối tượng miền.
Tầng UI ngược lại. Nó hiển thị và nhận dữ liệu theo cách mà người dùng có thể liên quan đến và ánh xạ đầu ra/đầu vào đó đến và từ định dạng đối tượng miền.
Cấp logic nghiệp vụ chỉ cần biết một điều. Logic nghiệp vụ. Nó không quan tâm đến dữ liệu đến từ đâu, và nó không quan tâm đến vị trí của tầng dữ liệu. Nó biết rằng nó nên gắn cờ một tài khoản mà chỉ là overdrawn, làm thế nào để thể chất làm điều đó không phải là một phần của công việc của mình thực sự.
Bản thân các đối tượng miền không có bất kỳ logic nào, chúng chỉ là các vùng chứa để truyền dữ liệu giữa các cấp. Điều này có nghĩa rằng bạn có thể tải các đối tượng miền và giao diện mà không cần phải suy nghĩ gì cả về các phụ thuộc.
Vào cuối ngày, tôi cảm thấy rằng tôi có một cơ sở mã khá rõ ràng với các tầng tách biệt rõ ràng. Và với một số giao diện nghiêm ngặt và các lớp cơ bản tốt nhất thì việc viết mã chỉ là nói cho phần mềm biết phải làm gì khi X xảy ra. Chỉ cần làm thế nào nó được cho là.
</rant>
Edit: Oh, yeah. Điều này đúng cho cả LINQ, SubSonic và các ORM khác.
Nguồn
2008-08-11 19:24:44
Điều gì sẽ xảy ra nếu bạn muốn đọc 10000 hàng từ cơ sở dữ liệu và lưu trữ tổng số ở đâu đó? Tại sao kéo tất cả những thứ đó qua mạng khi bạn có thể: chèn vào tổng số .. chọn từ chi tiết? –
Với ORM, bạn không cần phải đọc 10000 hàng để có được tổng số. Ví dụ, trong LinqToSql có thể sử dụng phương thức Sum để tổng hợp một thuộc tính, sau đó được chuyển đổi thành SQL thích hợp cho phép máy chủ sql tính tổng mà không trả về tất cả các hàng. –
@Ole: LinqToSql (chỉ hỗ trợ SQL Server, và có thể đã chết vì lợi ích của Entity Framework) vẫn là một hộp đen, tại sao không tự viết SQL? Và nếu bạn đặt logic tóm tắt trong một thủ tục được lưu trữ, bạn không cần phải cung cấp cho ứng dụng truy cập thô vào các bảng của bạn. – ObiWanKenobi