2011-10-11 29 views
7

Tôi đang làm việc trên ứng dụng DDD "thực" đầu tiên của mình.DDD. Cài đặt cấu hình người dùng thuộc về ai?

Hiện tại, khách hàng của tôi không có quyền truy cập vào lớp miền của tôi và yêu cầu thay đổi tên miền bằng cách đưa ra các lệnh.

Sau đó tôi có một mô hình đọc riêng biệt (được làm phẳng) để hiển thị thông tin (như CQRS đơn giản).

Tôi hiện đang làm việc về cấu hình hoặc cụ thể là các cài đặt mà người dùng định cấu hình. Sử dụng ứng dụng blog làm ví dụ, cài đặt có thể là tiêu đề hoặc biểu tượng blog.

Tôi đã phát triển một trình tạo cấu hình chung để xây dựng một đối tượng cấu hình được nhập mạnh mẽ (ví dụ: BlogSettings) dựa trên bộ sưu tập cặp giá trị khóa đơn giản. Tôi bị mắc kẹt về việc liệu các đối tượng cấu hình này có nằm trong miền của tôi hay không. Tôi cần truy cập vào chúng từ máy khách và máy chủ.

Tôi đang xem xét việc tạo thư viện "Được chia sẻ" chứa các đối tượng cấu hình này. Đây có phải là cách tiếp cận chính xác không?

Cuối cùng, nơi nào mã nên lưu các cài đặt cấu hình như vậy? Một giải pháp dễ dàng là đặt mã này vào dự án Domain.Persistence của tôi, nhưng sau đó, nếu chúng không phải là một phần của miền, chúng có thực sự ở đó không?

Cảm ơn,

Bến

+2

Một cách khác để xem xét nó có thể là bạn có ngữ cảnh giới hạn "Cấu hình" hoặc "Cài đặt" riêng biệt. Đó là một sự tách biệt hợp lý, không phải là một sự vật lý. Vì vậy, bạn vẫn có thể theo đuổi việc cung cấp quyền truy cập vào ngữ cảnh bằng cách sử dụng các công nghệ khác nhau (máy khách vs máy chủ). Tất cả các mã để làm như vậy tuy nhiên, thuộc về bối cảnh. –

+0

@YvesReynhout đây là tuyến đường chúng tôi đã kết thúc, có ngữ cảnh cấu hình mà chúng tôi tương tác. Tuy nhiên chúng tôi đã làm cho các đối tượng cấu hình được chia sẻ - trong trường hợp này, sự tách biệt sẽ đơn giản là gây ra sự sao chép mã không cần thiết. –

+0

Ồ, nhưng tách hợp lý không dẫn đến sao chép mã. Nó chỉ có nghĩa là bối cảnh bị ràng buộc chịu trách nhiệm về mã. Mã của bối cảnh giới hạn được triển khai hoàn toàn trực giao với thực tế đó như thế nào (nó có thể được lưu trữ hoàn toàn bên trong một tiến trình cùng với mã của các ngữ cảnh bị ràng buộc khác). –

Trả lời

8

tài khoản thiết lập cấu hình thuộc về miền nếu họ được đánh mạnh và mô hình hóa dựa trên ngôn ngữ phổ biến, ví dụ: 'BlogSettings'. Sự khác biệt duy nhất giữa các thiết lập và các đối tượng miền khác là các thiết lập khái niệm là 'tên miền đơn'. Họ không có vòng đời như các thực thể khác và bạn chỉ có thể có một ví dụ.

Trình tạo cấu hình chung thuộc về Persistence giống như mã chịu trách nhiệm về cài đặt lưu và đọc.

+0

là có thể chấp nhận để hiển thị các "miền đơn" này cho khách hàng hay tôi nên tạo một phiên bản "đọc" cho khách hàng (về cơ bản nó sẽ giống hệt nhau). Tôi đã cố gắng tránh tham chiếu tên miền của tôi từ khách hàng cho đến nay. –

+0

Hãy đối xử với đối tượng 'cài đặt' này giống như cách bạn đối xử với các thực thể khác. Nếu bạn có phiên bản 'đọc' của các thực thể khác, điều đó có nghĩa là bạn cũng có phiên bản Cài đặt 'đọc'. – Dmitry

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