我想在我的項目中應用領域驅動設計原則,但無法確定我應該如何處理依賴模型的業務邏輯。把複雜的,多領域相關的邏輯:在服務層或模型本身?
例如,假設此場景:
我有Person
和Car
域模型。每個人都適合從基於年齡/預算/偏好等的數據庫購買某些汽車。在我的模型中,我希望有一個適合此人使用的汽車列表(SuitableCars
)。
public class Person
{
public List<Car> SuitableCars {get; set;}
}
但爲了做到這一點,現在,我已經調用一個服務方法(GetSuitableCarsForPerson
)從資料庫(含倉庫DI)中獲取數據,運行我的(有時是相當複雜的多型號而定)的自定義邏輯並獲得汽車。
public class PersonService : IPersonService
{
private IRepository _repo;
public PersonService(IPRepository repository)
{
_repo = repository;
}
public List<Car> GetSuitableCarsForPerson(Person person)
{
// business goes here right now.
}
}
所以SuitableCars
屬性的聲明將成爲:
private IPersonService _personService;
public List<Car> SuitableCars
{
get
{
// I have to inject a PersonService in my model. Bad practice?
return _personService.GetSuitableCarsForPerson(this);
}
}
據我所知,服務應保持薄(ref),並用來讓你把不收的DomainModel相關業務在其中。但我相信我所描述的邏輯屬於模型本身。
那麼,如何處理這些類型的邏輯,我應該訪問相關模型並執行各種自定義驗證/過濾器以獲取適當的數據?
謝謝。