5

Tôi đã đọc một số bài viết mà thảo luận về cách sử dụng thực thể EF như kinh doanh các đối tượngmiền hướng thiết kế sử dụng Entity framework 4

Using Entity Framework entities as business objects?

nhưng không này làm cho thiết kế của doanh nghiệp đối tượng phụ thuộc vào mô hình dữ liệu? Đây có phải là thực hành phù hợp cho các ứng dụng doanh nghiệp không? không nên mô hình miền và dữ liệu độc lập và thay đổi trong mô hình không ảnh hưởng đến mô hình khác? nếu tôi chọn giữ chúng riêng biệt, thì tôi có cần phải tạo một lớp khác để điền các đối tượng nghiệp vụ từ các thực thể EF không? nếu tôi có cả hai đối tượng kinh doanh tùy chỉnh và các thực thể EF, cái nào được sử dụng để chuyển dữ liệu giữa các lớp (bao gồm tất cả các cách để giao diện người dùng)? là có một mô hình kiến ​​trúc cho điều này? Sẽ hữu ích nếu có một ứng dụng mẫu thể hiện các khái niệm này (không chỉ đơn giản là một phiên bản demo, phù hợp để sử dụng trong một ứng dụng doanh nghiệp).

liên kết này sẽ giải thích vấn đề rõ ràng

http://msdn.microsoft.com/en-us/magazine/dd882510.aspx#id0420099

Trả lời

9

Nó phụ thuộc vào cách kết hợp lỏng lẻo mà bạn muốn/cần.

Lấy ví dụ ứng dụng WPF/MVVM nói chuyện với Dịch vụ qua WCF và lưu trữ dữ liệu bằng EF.Sau đó, nếu bạn đi tất cả các cách bạn có những điều sau đây:

Trên client:

  • Xem
  • ViewModel
  • Mẫu

giữa client và Server:

  • Đối tượng truyền dữ liệu

Trên máy chủ:

  • Các đối tượng kinh doanh
  • Entities EF

Với mã ánh xạ giữa mỗi lớp. Điều này có thể là rất nhiều công việc và nhân đôi giữa các đối tượng. Nó có thể không thực tế quá có nhiều lớp. Chúng tôi cố gắng kết hợp chúng nếu có thể, ví dụ như DTO cũng có thể là mô hình?

Sử dụng các lớp học một phần, bạn có thể thêm chức năng vào các lớp EF sẽ không bị xóa nếu mô hình được tạo lại. Vì vậy, bạn có thể sử dụng sau đó làm thực thể kinh doanh của bạn.

tôi sẽ không sử dụng chúng như DTO của vì những lý do sau đây:

  • Một sự thay đổi trong cơ sở dữ liệu có thể ảnh hưởng nhiều hệ thống
  • Non MS khách hàng có thể sử dụng dịch vụ của bạn
+0

cảm ơn lời giải thích đơn giản, đẹp mắt – RKP

+0

+1, KISS là con đường để đi – jgauffin

4

một Đây là một tranh cãi và nó hoàn toàn phụ thuộc vào bao xa bạn muốn kiến ​​trúc sư ứng dụng của bạn ...

Có rất mạnh ý kiến ​​ủng hộ việc sử dụng DTO/POCO (Các phương pháp CLR cũ) và thực sự là bạn can use EF to generate DTO's to achieve such a thing. Đây là loại the Rolls-Royce đối với kiến ​​trúc ... Lợi thế chính là bạn tách logic kinh doanh khỏi truy cập dữ liệu và sau đó về lý thuyết cho phép bạn chuyển sang ORM mới nhất và lớn nhất trong tương lai. Những bất lợi là (như bạn đã nói trong câu hỏi của bạn) bạn cần một dịch vụ lập bản đồ để dịch giữa hai lớp cũng như thực tế rằng bạn đang về cơ bản kết thúc với nhiều lớp để đại diện cho cùng một mảnh dữ liệu.

Nói chung, việc sử dụng DTO/POCO không được ủng hộ cho nhỏ/trung bình vì mã tăng thêm, tuy nhiên, đối với các dự án lớn hơn, việc phân tách mối quan tâm có thể mang lại lợi ích. Ứng dụng doanh nghiệp hay không, tôi nghĩ bạn cần phải xem xét thực tế có hay không bạn muốn chuyển đổi công cụ ORM của bạn (tức là, EF).

Ngoài ra, tôi nghĩ rằng các lớp EF được tạo đủ đủ đơn giản và ẩn phần lớn mã truy cập dữ liệu trong ".designer.cs" và thậm chí là phần lớn số đó với các thuộc tính khai báo.

Vì vậy, ý kiến ​​cá nhân của tôi, mặc dù có lẽ là một ý kiến ​​gây tranh cãi, là để đồng ý với the accepted answer in the linked post và sử dụng các thực thể khung thực thể như đối tượng kinh doanh. Tôi cũng đồng ý rằng đây là mục đích đằng sau EF (và hầu hết ORM) ở vị trí đầu tiên ...

Xem qua thisseriesof articles để biết thêm thông tin.

+0

Tôi đồng ý rằng Tôi có thể đặt logic nghiệp vụ của mình trong các thực thể EF một phần, để che chắn nó khỏi những thay đổi trong mô hình dữ liệu. nhưng quan điểm của tôi là nếu tôi muốn thiết kế các đối tượng kinh doanh của mình theo cách khác với mô hình dữ liệu, có thể không? quan điểm của tôi là thiết kế mô hình dữ liệu được thực hiện bằng cách sử dụng các nguyên tắc chuẩn hóa dữ liệu, không sử dụng các nguyên tắc hướng đối tượng, vì vậy nó có thể không phù hợp với thiết kế mô hình miền. – RKP

+0

Tôi chưa đi qua các liên kết bạn đã cung cấp. cảm ơn – RKP

+0

EF được thiết kế để cung cấp hướng đối tượng xung quanh các lược đồ dữ liệu. Ví dụ: bằng cách cung cấp các thuộc tính điều hướng và kế thừa và các tính năng bổ sung khác. – Reddog

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