2014-04-15 19 views
6

Tôi không chắc chắn tôi có thể nói rõ điều này đúng không ...Các lớp học đầu tiên của bạn có phải là các lớp miền của bạn không?

Tôi đang bắt đầu kiến ​​trúc một giải pháp sử dụng Khuôn khổ thực thể mã đầu tiên và bắt đầu có cảm giác tôi đang gây ô nhiễm các lớp miền của mình (các lớp EF sẽ sử dụng để tạo DB) với quá nhiều thông tin cụ thể DB: Tôi phải thực hiện một số phương thức ảo để tải có thể xảy ra, tôi thêm các thuộc tính rõ ràng nhằm cấu hình DB vào các thuộc tính của tôi, v.v. . Tôi cũng lo ngại về mức độ phổ biến của các lớp học này trong toàn bộ dự án.

Thứ nhất, tôi có ý nghĩa và/hoặc tôi có hiểu lầm cơ bản về cách EF nên được sử dụng không? Thứ hai, nếu tôi hiểu điều này đúng, câu hỏi của tôi là: có ai khác phân biệt giữa các lớp mã đầu tiên được sử dụng để tạo DB và các lớp miền của họ hay không (có thể sử dụng trình tự động để điền một từ cai khac)?

+0

Câu hỏi này nên được hỏi trên [programmers.stackexchange.com - trang web câu hỏi và câu trả lời dành cho các chuyên gia và sinh viên về phát triển phần mềm và các lĩnh vực liên quan, những người quan tâm đến việc nhận câu trả lời của chuyên gia về các câu hỏi khái niệm về phát triển phần mềm] (http: // programmers.stackexchange.com). –

+1

có ý nghĩa với tôi nhưng tôi sợ tôi không biết câu trả lời mà không cần nghiên cứu thêm, hy vọng một người khác sẽ có thể giúp đỡ. – Fuzzybear

+0

OK, tôi cũng sẽ thử tại programmers.stackexchage. Chúc mừng. – CptCoathanger

Trả lời

2

Tôi đã dành nhiều thời gian thử các cách tiếp cận khác nhau cho vấn đề này. Trong sự đơn giản của nó, có thể và rất dễ dàng với Entity Framework để sử dụng các lớp dữ liệu như các lớp miền.

Kinh nghiệm của tôi là trong các dự án nhỏ, bạn có thể lấy đi bằng cách sử dụng các lớp EF của bạn làm lớp miền của bạn. Điều này là nhanh chóng và đơn giản, tuy nhiên khi các dự án phát triển lớn hơn thì bắt đầu này và trở thành vấn đề vì bạn không thể kiểm soát quyền truy cập bằng bất kỳ cách nào.

Kịch bản phổ biến nhất là khi hiển thị thuộc tính điều hướng trên các lớp EF. Toàn bộ ứng dụng của bạn giờ đây sẽ có thể điều hướng toàn bộ tập dữ liệu của bạn. Vì vậy, với mô hình này, bạn từ bỏ tất cả quyền kiểm soát đối tượng dữ liệu và miền của bạn.

Có một số lợi thế để có các lớp miền riêng biệt với EF. Trước hết bạn sẽ không bị ràng buộc nặng nề với EF hoặc mã đầu tiên. Với một mức độ phân tách/không giới hạn, bạn sẽ có thể trao đổi khung dữ liệu của bạn nếu bạn mong muốn như vậy. Thứ hai, bạn có thể kiểm soát dữ liệu của mình hiệu quả hơn nhiều.

Cá nhân tôi đã đạt đến điểm thực dụng nơi tôi đưa ra quyết định này vào đầu mỗi dự án. Nếu dự án nhỏ và chứa thì tôi có thể tránh sự trừu tượng này thêm để ủng hộ sự đơn giản. Trong hầu hết các dự án lớn và trung bình, tôi đã tách ra.

2

Nếu bạn định sử dụng các nguyên tắc SOLID trong mã hóa của mình, bạn thực sự nên tách riêng việc triển khai dữ liệu (trong trường hợp mã EF của bạn trước) từ tên miền/logic nghiệp vụ của bạn. Lập bản đồ chúng là một chút phí, nhưng hãy xem xét điều gì xảy ra khi bạn cần truy cập một số dữ liệu từ các dịch vụ web?

Bên cạnh đó, các lớp miền của bạn sẽ thường chứa tính hoặc có nguồn gốc giá trị (ví dụ như tên, địa chỉ) mà sẽ không có mặt trong các lớp cơ sở dữ liệu của bạn và có khả năng ngược lại (ví dụ như cơ sở dữ liệu thông tin đăng nhập)

Tôi muốn thực hiện tìm kiếm mẫu lưu trữ trong ví dụ đầu tiên.

+0

Ví dụ về ô nhiễm, cổ vũ tốt hơn. Đây là cách tiếp cận giải pháp của tôi đã bắt đầu ... – CptCoathanger

+0

Cũng giống như ghi chú bổ sung và chắc chắn bạn đã biết - tôi sẽ cẩn thận với việc sử dụng tải chậm. Tôi nhận ra rằng nó thực sự hữu ích để có được kết quả nhanh chóng, và hiểu tại sao nó rất hấp dẫn ban đầu nhưng bạn là tốt hơn nhiều khi bạn có thể kiểm soát tất cả mọi thứ. – KerSplosh

+0

Bạn có thể thêm các giá trị được tính hoặc có nguồn gốc Bên trong các thực thể mã đầu tiên của bạn. Mã đầu tiên có nghĩa là Mã miền của bạn trước, sau đó ánh xạ nó vào cơ sở dữ liệu. Đối với dịch vụ Web, bạn nên sử dụng DTO để tổng hợp dữ liệu từ các thực thể và tránh mã nghiệp vụ trong tuần tự hóa. – Guillaume

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