我正在使用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()
),在实体中是正确的还是在存储库中是否正确?
答案 0 :(得分:1)
这取决于您的偏好。域驱动设计更像是一种思考方式而不是一种做法。
有些人喜欢保持他们的实体模型层非常轻巧和干净 - 因此不会在那里进行任何验证。
在我个人看来,实体不是DTO(数据传输对象),因此不应该是贫血。我不喜欢贫血领域模型,因为它减损了代码重用:http://en.wikipedia.org/wiki/Anemic_domain_model
答案 1 :(得分:1)
是的,将验证放在您的实体中是正确的。另一方面,您可以在保存
之前从存储库Save方法调用此验证进行验证E.g。
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;
}
}