我有兩個域實體:DDD:持久性實體更新邏輯在哪裏?
class Foo {
int Id {get;}
string Name {get;}
}
class FooBar : Foo {
RuleEnum Rule {get;}
string NewName {get;}
int OrderId {get;}
}
而且單持久化模型爲他們:
class FooInDb {
int Id {get;set;}
int Rule {get;set;}
string Name {get;set;}
string NewName {get;set;}
int? OrderId {get;set;}
}
我有應用服務,將API結合模型域模型(從IEnumarable<Api.Foo>
到IEnumarable<FooBar>
)。某些商業規則的驗證發生在FooBar
ctor。我需要什麼未來:從數據庫加載所有FooInDb
S和更新其領域,根據:
void Update(FooBar fooBar, FooInDb fooInDb)
{
fooInDb.Rule = fooBar.Rule;
if (fooBar.Rule == RuleEnum.New){
fooInDb.NewName = fooBar.NewName;
fooInDb.OrderId = null;
}
else {
fooInDb.NewName = null;
fooInDb.OrderId = fooBar.OrderId;
}
}
如果這一決定被放置在某一領域的業務? (我個人不希望域服務項目中引用的持久化模型的項目。)如果沒有,怎麼罰款,可以將其放置在倉庫和應用服務打電話?
正如你所說,域項目不應該引用持久性項目,因爲它不應該關心技術持久性細節。因此,將域模型和數據庫之間的映射放入持久性項目中。 –
我動一下一下地映射到工廠方法決定'FooBar':'FooBar.New()'和'FooBar.NotNew()' – smg
但隨後是域項目,你應該避免 –