Ale*_*sev 22 c# domain-driven-design
public class Person
{
public IList<String> SpecialBirthPlaces;
public static readonly DateTime ImportantDate;
public String BirthPlace {get;set;}
public DateTime BirthDate
{
set
{
if (BirthPlace!=null &&
value < ImportantDate &&
SpecialBirthPlaces.Contains(BirthPlace))
{
BirthPlace = DataBase.GetBirthPlaceFor(BirthPlace, value);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是尝试在我的域模型中封装一个简单的规则.我试图捕获的规则是:当出于某种原因,我们更新一个人的出生日期(例如,原始用户输入中存在错误)时,我们需要检查该人的出生地并将其替换为来自其他人的其他值.数据库,如果它在我们的数据库中列为特殊的出生地.
但是,我实现它有两个问题:
此规则修改域实体状态(属性),我需要在用户界面中反映此更改.我的域名模型是POCO.我可以把这个逻辑放在ViewModel中,但这是错误的,因为它不是UI逻辑.这是我需要捕获的一个重要的域规则.
我的SpecialBirthPlaces列表非常大,每次我从数据库中获取客户时我都不想填充它.此外,当规则得到满足时,我需要替换Birthplace.正如我所说,特殊的出生地和替代品的列表非常大,并存储在数据库中.
如何在DDD风格中实现我需要的逻辑?
Pau*_*aul -1
IMO 性能方面的最佳方法是在数据库中创建一个存储过程,并在属性更改事件上标记实体,以便在向数据库提交更改(SaveChanges() 调用)时调用它。ObjectContext.ExecuteFunction在这种情况下是你的朋友。
将所有出生地查找和更新的逻辑放在该存储过程中。确保存储过程包含在事务中 - 以便在更新失败时回滚更改。
编辑:抱歉,没有与 DDD 相关的答案。