我正在使用Domain-Driven-Design,有一个名为Menu的实体,需要检查项目是否有三个级别,类现在如下所示:
public class Menu : Entity
{
public virtual AreaMenu AreaMenu { get; set; }
public virtual Menu MenuPai { get; set; }
public string Title{ get; set; }
public virtual Site Site { get; set; }
public Status Status { get; set; }
public byte StatusId
{
get { return (byte)Status; }
set { Status = (Status)value; }
}
public bool VerifyLevels()
{
if (this.MenuPai == null || this.MenuPai.MenuPai == null || this.MenuPai.MenuPai.MenuPai == null || this.MenuPai.MenuPai.MenuPai.MenuPai == null)
return true;
return false;
}
}这个检查级别(public bool VerifyLevels()),在实体中是正确的,还是在存储库中是正确的?
发布于 2012-03-31 00:59:25
是的,在你的实体中放置验证是正确的。另一方面,您可以从存储库的Save方法中调用此验证,以便在保存之前进行验证
例如。
public class MenuRepository : IMenuRepository
{
public bool Save(Menu menu)
{
if (!menu.VerifyLevels())
return false;
if (menu.ID == 0)
context.Menus.AddObject(menu);
else
context.ObjectStateManager.ChangeObjectState(menu, EntityState.Modified);
context.SaveChanges();
returns true;
}
}发布于 2012-03-31 00:58:12
这取决于你的喜好。领域驱动设计更多的是一种思维方式,而不是一种行为方式。
有些人喜欢保持他们的实体模型层非常轻量级和整洁-因此不会在那里放任何验证。
在我个人看来,实体不是DTO(数据传输对象),因此不应该是贫血的。我不喜欢贫血域模型,因为这有损于代码重用:http://en.wikipedia.org/wiki/Anemic_domain_model
https://stackoverflow.com/questions/9947163
复制相似问题