Trả lời

18

Các thuật ngữ có một chút mơ hồ tôi đồng ý. Tôi sẽ sử dụng tên miền để tham khảo khu vực kinh doanh mà bạn đang xử lý. Giống như ngân hàng hoặc bảo hiểm hoặc những gì không. Sau đó, bạn có các mô hình miền. Đây là những thứ bạn xử lý trong miền doanh nghiệp đó, như đối với tên miền doanh nghiệp của bạn có tài khoản, khách hàng, chuyển khoản, v.v. Tôi sẽ sử dụng thuật ngữ thực thể để tham chiếu lớp/POJO hoặc phiên bản kiên cố/kiên cố của mô hình .

gì có thể lẫn lộn bạn ở đây là trong thời gian MVC, các mô hình là một điều cụ thể, nhưng nó tham chiếu mô hình dữ liệu dùng để biểu diễn một số bài thuyết trình trong một giao diện web do đó, không nhận được rằng hỗn hợp trong với lời giải thích ở trên.

28

Các cụm từ bạn nhầm lẫn là: "domain objects", "thực thể miền" và "đối tượng mô hình". Trong khi thường được sử dụng thay thế cho nhau, các thực thể miền và đối tượng mô hình cũng có thể là các cá thể của mẫu active record (về cơ bản: các đối tượng miền có logic lưu trữ được thêm vào).

Trong đối tượng miền thông thường, không có logic lưu trữ. Nó được xử lý bởi data mappers.

Thuật ngữ "đối tượng mô hình" xuất phát từ sách của Fowler (đọc PoEAA để biết thêm chi tiết), và IMHO, là một phần của sự nhầm lẫn MVC, vì toàn bộ mô hình là một lớp ứng dụng (MVC bao gồm nó và lớp trình bày) , trong đó có những "đối tượng mô hình", thường được xử lý bởi services (trong hình ảnh đó, lớp mô hình là tất cả ba vòng tròn đồng tâm với nhau).

Tôi thích sử dụng cụm từ "đối tượng tên miền" thay thế.

Thuật ngữ "thực thể miền" (hoặc "đối tượng thực thể") thường được sử dụng khi tác giả ngụ ý rằng đối tượng là đại diện trực tiếp của cấu trúc lưu trữ (thường xuyên hơn - bảng cơ sở dữ liệu). Đây cũng là hầu như luôn luôn thực hiện các hồ sơ hoạt động.

P.S .: trong một số điều bạn cũng sẽ thấy thuật ngữ "mô hình" (số nhiều). Nó thường không liên quan trực tiếp đến mẫu thiết kế MVC, bởi vì nó nói về kiến ​​trúc giống như Rails, trong đó "mô hình" chỉ là các bản ghi hoạt động, được trực tiếp tiếp xúc với/tạo bởi bộ điều khiển.

.. không chắc liệu này nhầm lẫn bạn nhiều

3

Đối với hồ sơ. Trong thực tế, tên miền và mô hình là như nhau, trong khi thực thể cũng là một tên miền/đối tượng sẽ được sử dụng để lưu trữ trong cơ sở dữ liệu.

Một số người đã cố gắng giải thích lại các chủ đề như vậy nhưng không có chủ đề nào là số nguyên tắc.

Sự khác biệt là, trong thế giới Java, Domain được sử dụng nhiều hơn, trong khi ở thế giới C#, Model được sử dụng (và MS khuyến khích sử dụng) nhưng quy ước của nó và bạn có thể sử dụng cả hai.

Trong cùng một khái niệm, đối tượng giá trị (VO) được sử dụng bởi người Java, trong khi DTO cho người của C# ngay cả khi cả hai đều giống nhau. Ngoài ra POJO (Java) so với POCO (C#), Gói (Java) so với NameSpace (C#), Setter và Getter (Java) vs Encapsulation (C#)

1

Cả tên miền và mô hình là các lớp. Làm thế nào lớp được sử dụng phân biệt nếu nó nên được phân loại và đặt trong một tên miền hoặc thư mục mô hình. Nếu lớp sẽ được sử dụng CHỈ trong khung nhìn, hãy đặt nó trong thư mục mô hình. Nếu lớp được ánh xạ tới một đối tượng cơ sở dữ liệu, sau đó đặt nó trong thư mục miền.

0

Bạn có thể nói Tên miền là các lớp cho bảng cơ sở dữ liệu, đối tượng dịch vụ bên ngoài, v.v. Vì vậy, nếu bạn phát triển dự án và tạo tên miền thư mục, bạn đặt đối tượng cơ sở dữ liệu vào đó. Một lớp như vậy là một thực thể và có thể là một lớp khách hàng với các thuộc tính của nó. Tại sao một thực thể và không phải là một POCO? Thats vì sử dụng của nó. Nội dung của thực thể có thể được đọc/ghi vào cơ sở dữ liệu. Bởi vì nghĩ về nó như một thực thể bạn biết nơi bạn có thể sử dụng nó cho. Theo hiểu biết bạn biết một thực thể của nó, bạn không đặt nó vào tên của nó. Bây giờ cho Model. Nếu bạn đang sử dụng Khách hàng này thì có thể là các thuộc tính bạn không muốn sử dụng. Một khách hàng có thể là một thực thể đơn giản. Nhưng cho phép nói rằng bạn có một phức tạp. Một trong những bạn đọc từ một dịch vụ web với rất nhiều thuộc tính bạn sẽ không sử dụng. Sau đó, bạn có thể đọc Entity này (= hoàn toàn có thể được thực hiện với serialization) và sử dụng Entity này để tạo ra một Model của nó. Nếu Entity đó được sử dụng để sao chép dữ liệu vào Model thì chúng ta cũng nói về một Data Transformation Object (DTO), đôi khi bạn viết nó như CustomerDTO. Để sao chép dữ liệu từ Thực thể sang Mô hình, bạn có thể sử dụng các công cụ Lập bản đồ. Tên của các thực thể thay đổi sau đó để CustomerModel. Sau đó, bạn sử dụng Mô hình mở rộng vì nếu không bạn sẽ không biết điều gì là gì. Trong CustomerModel này có thể có rất nhiều thuộc tính khác. Một số thuộc tính này có thể là các thuộc tính xử lý (chúng không phải xuất phát từ thực thể của Khách hàng). Nội dung cho những tài sản này đến từ các dịch vụ khác. Một đơn giản có thể được tạo ra từ Khách hàng là Fullname, nó được tạo thành từ một số thuộc tính của Khách hàng. Vì vậy, việc điền một CustomerModel có thể phức tạp. Chúng ta có thể đặt mã để điền CustomerModel trong một Nhà máy được gọi là và gọi CustomerFactory này.

Các vấn đề liên quan