Đây là khái niệm liên quan đến câu hỏi của tôi here. Tuy nhiên, tôi đã chơi đùa với NHibernate, và nhận ra cốt lõi thực sự của câu hỏi của tôi là gì.Thực hiện bất kỳ .NET ORM nào có sử dụng các hàm tạo "đúng" không?
Trong thiết kế OO cổ điển, để đóng gói dữ liệu đúng cách, đó là một mẫu phổ biến để chuyển các giá trị vào hàm tạo của đối tượng được lưu trữ trong các thành viên dữ liệu (trường). Những giá trị đó nên không được thay đổi chỉ được hiển thị với người truy cập (thuộc tính chỉ đọc). Những người được phép thay đổi có cả accessors và mutators (đọc-ghi tài sản). Dường như với tôi rằng thích hợp O/RM nên tôn trọng các quy ước này và sử dụng các nhà thầu có sẵn khi tạo một đối tượng. Dựa vào các thuộc tính đọc-ghi, phản chiếu, hoặc các phương thức hackish (IMHO) khác có vẻ ... sai.
Có một giải pháp .NET O/RM ngoài đó thực hiện điều này không?
EDIT
Để giải quyết điểm Praveen, tôi biết rằng có những dự án mà có một 'mặc định' thuật toán cho việc lựa chọn một nhà xây dựng - StructureMap, ví dụ, luôn luôn sử dụng các nhà xây dựng với hầu hết các đối số, trừ bạn đánh dấu một hàm tạo với thuộc tính tùy chỉnh. Tôi có thể thấy đây là một cách hiệu quả để xử lý tình huống. Có lẽ sử dụng một container IoC ngoài ORM sẽ cung cấp loại giải pháp mà tôi cần - mặc dù có vẻ như với tôi rằng đây là, trong khi không vốn xấu, một bước bổ sung không cần thiết để sử dụng ORM.
Có một câu hỏi thú vị khác: Có thể hàm tạo chứa một số logic nghiệp vụ không? I E. khi tôi tạo cá thể của lớp A, hàm tạo của nó có thể tạo cá thể của lớp B liên tục và gán nó cho thuộc tính với trình thiết lập riêng. –
@ Alex: Mục tiêu của tôi là có các đối tượng miền được kiên trì không biết gì. Có logic để tạo ra một đối tượng kiên trì từ đối tượng miền vi phạm điều đó và kết hợp chặt chẽ đối tượng miền với phương thức persistence - một Bad Thing khác. –