tôi cố gắng giữ cho mọi thứ rất đơn giản bất cứ khi nào tôi có thể, vì vậy thường một cái gì đó như thế này làm việc cho tôi:
Myapp.Domain - lớp học Tất cả các lĩnh vực cụ thể chia sẻ không gian tên này
Myapp.Data - lớp mỏng mà tóm tắt cơ sở dữ liệu từ miền.
Myapp.Application - All "hỗ trợ mã", khai thác gỗ, chia sẻ mã tiện ích, người tiêu dùng dịch vụ vv
Myapp.Web - Giao diện web
Vì vậy, lớp học sẽ là ví dụ:
- Myapp.Domain.Sales.Order
- Myapp.Domain.Sales.Customer
- Myapp.Domain.Pricelist
- Myapp.Data.OrderManager
- Myapp.Data.CustomerManager
- Myapp.Application.Utils
- Myapp.Application.CacheTools
vv
Ý tưởng tôi cố gắng ghi nhớ khi tôi đi cùng là các "miền" namespace là những gì chụp logic thực tế của ứng dụng. Vì vậy, những gì đi có những gì bạn có thể nói chuyện với các "chuyên gia miền" (Các dudes người sẽ sử dụng các ứng dụng) về. Nếu tôi viết mã gì đó vì điều gì đó mà họ đã đề cập, nó phải ở trong không gian tên miền và bất cứ khi nào tôi viết mã gì đó mà họ chưa đề cập (như đăng nhập, truy tìm lỗi, v.v) thì KHÔNG nên ở trong vùng tên miền.
Vì lý do này, tôi cũng cảnh giác về việc phân cấp đối tượng quá phức tạp. Lý tưởng nhất là một bản vẽ hơi đơn giản của mô hình miền nên được người lập trình hiểu trực giác.
Để kết thúc này, tôi thường không bắt đầu bằng cách suy nghĩ về các mẫu chi tiết. Tôi cố gắng mô hình hóa miền đơn giản như tôi có thể làm được, chỉ theo các hướng dẫn thiết kế hướng đối tượng tiêu chuẩn. Điều gì cần phải là một đối tượng? Họ có liên quan với nhau như thê nào? DDN trong tâm trí của tôi là về xử lý phần mềm phức tạp, nhưng nếu phần mềm của bạn không phải là rất phức tạp để bắt đầu, bạn có thể dễ dàng kết thúc trong một tình huống mà cách DDD làm việc thêm phức tạp hơn là loại bỏ nó.
Một khi bạn có một mức độ nhất định của sự phức tạp trong mô hình của bạn, bạn sẽ bắt đầu thấy cách thứ nhất định cần được tổ chức, và sau đó bạn sẽ biết được mô hình sử dụng, mà lớp học là uẩn, vv
Trong ví dụ của tôi , Myapp.Domain.Sales.Order sẽ là một gốc tổng hợp theo nghĩa là khi nó được instanced nó sẽ có khả năng chứa các đối tượng khác, chẳng hạn như một đối tượng khách hàng và tập hợp các dòng lệnh, và bạn sẽ chỉ truy cập các dòng lệnh cho đặt hàng thông qua đối tượng đặt hàng.
Tuy nhiên, để giữ mọi thứ đơn giản, tôi sẽ không có đối tượng "chính" chỉ chứa mọi thứ khác và không có mục đích khác, vì vậy lớp thứ tự sẽ có giá trị và thuộc tính hữu ích trong ứng dụng.
Vì vậy, tôi sẽ tham khảo những thứ như:
Myapp.Domain.Sales.Order.TotalCost
Myapp.Domain.Sales.Order.OrderDate
Myapp.Domain.Sales.Order.Customer .PreferredInvoiceMethod
Myapp.Domain.Sales.Order.Customer.Address.Zip
, vv
Làm cho cảm giác ... Đặt hàng và khách hàng là bạn AggRoots phải không? Vì vậy, khi bạn tham khảo đối tượng đặt hàng của bạn, bạn phải làm điều đó như: Myapp.Domain.Sales.Order.Order ?? –
Có và không - tôi đã mở rộng ví dụ của mình một chút, vì phần nhận xét hơi ngắn. – Console
'Các lớp Manager' trong không gian tên' Data' làm cho tôi trở thành mô hình thiếu máu –