2012-01-19 8 views
12

Tôi đã sử dụng AutoMapper trong vài tháng nay với thành công nhưng bây giờ tôi đã đánh một chút trở ngại. Những gì tôi cần (hoặc nghĩ rằng tôi cần) là để lập bản đồ 2 chiều. Điều này là khi tôi tải một mục từ cơ sở dữ liệu để phát trên màn hình (đối tượng miền -> xem mô hình) và khi người dùng thay đổi mục đã nói và ánh xạ nó trở lại đối tượng miền của tôi (xem mô hình -> đối tượng miền).Có gì sai với ánh xạ hai chiều?

Tôi hiểu rằng tôi có thể chỉ cần tạo ánh xạ trong hồ sơ của mình để xử lý ánh xạ hai chiều nhưng tôi đã đọc here rằng ánh xạ hai chiều là không cần thiết. Nhiều người chỉ ra rằng làm như vậy là một phản ứng để không sửa chữa vấn đề lớn hơn (những gì bao giờ có thể được).

Tôi chỉ tự hỏi tại sao lại có mùi mã này?

Trả lời

11

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).

+0

Câu trả lời thú vị. Cảm ơn bạn. – Nosila

+0

+1 Cũng được viết. Tôi không thể đồng ý thêm nữa. –

+0

Đ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