Khi tôi là một nhà phát triển cơ sở, tôi đã làm việc trên một dự án lớn về cơ bản đã làm những gì bạn mô tả. Chúng tôi đã không sử dụng automapper, nhưng chúng tôi tạo ra các viewmodels mà đóng gói các đối tượng miền mà về cơ bản có nghĩa là bạn đã thay đổi của bạn từ xem trực tiếp đến các đối tượng miền. Chỉ cần duy trì thay đổi của bạn và mau họ là nơi bạn muốn họ (trong cơ sở dữ liệu). Ứng dụng đó nên được phát hành cách đây bốn năm, nhưng chúng vẫn đang vật lộn.
Tại sao đây là mùi? Vâng, bạn đang mất theo dõi của bất kỳ ý định là tại sao bạn đang thay đổi công cụ. Và ý định là thứ thực sự quan trọng khi ứng dụng của bạn phát triển và trở nên phức tạp hơn. Khó thực thi các quy tắc mới trong miền của bạn bởi vì rất khó để biết chính xác hoạt động nào hợp lệ để thực hiện trên miền của bạn. Nếu bạn làm cho mô hình miền của bạn tự động chuyển đổi, nó cũng rất anemic.
Khi Jimmy chỉ ra, bạn muốn mô hình miền của mình sau các yêu cầu của miền của bạn, không theo yêu cầu của tự động hóa. Nếu tự động hóa đã làm việc trực tiếp trên mô hình của bạn, bạn sẽ phải thực hiện các điều chỉnh như đặt công khai thuộc tính, mặc dù đó có thể không phải là ý tưởng hay từ quan điểm mô hình hóa miền.
Tôi nghĩ rằng vấn đề lớn hơn là một mô hình miền có thể được tự động hóa trực tiếp từ các mô hình xem không truyền đạt ý định, cũng như đóng gói một cách thỏa mãn. Nếu bạn đang tạo một ứng dụng nhỏ, thì kiến trúc phong cách/tập dữ liệu hoạt động có thể không phải là một điều xấu, nhưng nếu giải pháp được mở rộng quy mô hoặc phức tạp, bạn có vấn đề lớn hơn việc ánh xạ từ viewmodel đến miền.
Trong ứng dụng hiện tại tôi đang làm việc trên, chúng tôi sử dụng automapper để ánh xạ từ miền đến dto và từ dto's để xem mô hình. Khi một cái gì đó được duy trì, chúng tôi dịch hoạt động trên các mô hình chế độ xem thành các lệnh rõ ràng được thực thi dựa trên miền. Tôi đã không bao giờ sẽ đề nghị một kiến trúc ba lớp trong bất kỳ ứng dụng quy mô lớn (khách hàng mỏng hoặc dày).
Câu trả lời thú vị. Cảm ơn bạn. – Nosila
+1 Cũng được viết. Tôi không thể đồng ý thêm nữa. –
Điều gì xảy ra nếu không có ý định? Giả sử bạn muốn ánh xạ qua lại một đối tượng miền với một đối tượng kiên trì trong kho lưu trữ. Ý định thay đổi đã được thể hiện ở cấp tên miền. Trong trường hợp này, tôi nghĩ rằng ánh xạ hai chiều là hợp lệ. – Guillaume