vai trò cung cấp các nghiệp vụ ra bên ngoài xoay quanh các domain model của hệ thống .
• Thiết kế riêng tầng hạ tầng ( infrastructure ) chứa các logic về truy xuất dữ liệu , thao tác với cơ sở dữ liệu , hàng đợi thông điệp ( message queue ).
Với việc tổ chức như thế này , các tầng ứng dụng , tầng
Với mô hình MVC , mô hình sản phẩm ( product model ) sẽ chứa tất cả các định nghĩa thuộc tính của sản phẩm , thông tin truy xuất cơ sở dữ liệu ( database ), cách thực thi các nghiệp vụ . Thông thường mô hình MVC sẽ sử dụng mẫu thiết kế ( pattern ) Active Record để ánh xạ ( map ) với cơ sở dữ liệu .
Đây là cách làm đơn giản nhưng cũng có các hạn chế sau :
• Mô hình sản phẩm trở nên quá nặng nề khi chứa quá nhiều logic về định nghĩa thuộc tính , truy xuất dữ liệu , thực thi nghiệp vụ …
• Do không phân tách được các tầng nghiệp vụ và dữ liệu nên khó thực hiện kiểm tra từng đơn vị riêng biệt ( unit test ).
• Việc thay đổi logic truy xuất dữ liệu và logic nghiệp vụ khó khăn do các thành phần bị phụ thuộc vào nhau .
• Tính đóng gói của nghiệp vụ không đảm bảo . Các nghiệp vụ sẽ chỉ được cài đặt theo mô hình CRUD . Vì vậy càng về sau sự trùng lặp logic càng xảy ra nhiều .
Do các hạn chế nêu trên nên đây không phải là mô hình phù hợp với các ứng dụng logic phức tạp như eCommerce do sẽ dẫn tới chi phí bảo trì cao cho hệ thống sau này ..
2.2 . Mô hình ba lớp ( domain driven design ) Hướng tiếp cận tiếp theo là phân tích và thiết kế theo phương pháp Domain Driven Design .
Đặc trưng của mô hình này là :
• Phân tách tầng nghiệp vụ ( domain layer ) ra khỏi tầng ứng dụng ( application layer ) và tầng truy xuất cơ sở dữ liệu ( data access layer ). Tầng nghiệp vụ sẽ trở thành nơi trung tâm chứa tất cả các logic nghiệp vụ .
• Trong tầng nghiệp vụ , cần tập trung vào thiết kế mô hình sao cho mô hình phản ánh đầy đủ nhất tính chất nhất quán của nghiệp vụ .
• Chia tầng nghiệp vụ thành hai thành phần riêng biệt : Domain Model và Domain Service . Domain service có nghiệp vụ và tầng truy xuất dữ liệu sẽ được chia tách riêng biệt và chỉ tương tác với nhau thông qua giao diện . Các nghiệp vụ sẽ xoay quanh mô hình sản phẩm . Tầng truy xuất dữ liệu sẽ truy xuất hoặc lưu trữ các đối tượng thông tin về sản phẩm .
Nhưng việc áp dụng mô hình ba lớp xoay quanh mô hình sản phẩm cũng gây ra trở ngại cho việc xây dựng mô hình cho các nghiệp vụ đọc dữ liệu .
Các nghiệp vụ này rất đa dạng và cách làm hiệu quả nhất là sử dụng các câu truy vấn SQL trực tiếp . Nhưng nếu việc truy xuất bị thắt chặt vào các mô hình ORM ( Object-Relational Mapping ) sẽ làm ảnh hưởng tới hiệu năng , cũng như gây khó cho việc thay đổi các logic truy xuất dữ liệu . Đồng thời nó cũng ảnh hưởng tới tốc độ phát triển khi việc cài đặt các nghiệp vụ truy vấn đa dạng phục vụ phía ứng dụng giao diện bị cản trở và phụ thuộc vào việc thiết kế mô hình và tầng Repository .
10 DIJSKTRA