Oop 始终有效的实体

Oop 始终有效的实体,oop,domain-driven-design,invariants,Oop,Domain Driven Design,Invariants,我很想知道“始终有效”实体方法(稍后与isValid方法相比)的支持者如何建议使用集合对对象建模。我真的很喜欢这种方法背后的想法,但我在实现它时遇到了困难,因为我的对象变得有点复杂。我想知道,我是否需要强制用户只使用一种更新方法,并指定所有字段 例如: public Meeting { public string Name {get; protected set;} -- must have public DateTime Time {get; protected se

我很想知道“始终有效”实体方法(稍后与isValid方法相比)的支持者如何建议使用集合对对象建模。我真的很喜欢这种方法背后的想法,但我在实现它时遇到了困难,因为我的对象变得有点复杂。我想知道,我是否需要强制用户只使用一种更新方法,并指定所有字段

例如:

public Meeting
{
   public string Name {get; protected set;}        -- must have
   public DateTime Time {get; protected set;}      -- must have
   public IWine Wine {get; protected set;}         -- optional
   public string Notneeded2 {get; protected set;}  -- optional
   public string Notneeded3 {get; protected set;}  -- optional
   public string Notneeded4 {get; protected set;}  -- optional
   public string Notneeded5 {get; protected set;}  -- optional
   public string Notneeded6 {get; protected set;}  -- optional

   public IUser Chair {get; protected set;}         --must have 
   public List<IUsers> Users {get; protected set;}  --must have
   public bool isBoardRelated {get; protected set;}  --must have
   public List<IBoardUsers> {get; protected set;}   -- if isBoardRelated, then must have

   private void CheckInvariants()
   {
       if (blah == null &&....etc)
       {
             throw new ModelInvariantCheckException("Catch me and cry");
        }
    }

}
公开会议
{
公共字符串名称{get;protected set;}--必须具有
public DateTime{get;protected set;}--必须具有
公共IWine Wine{get;protected set;}--可选
公共字符串Notneed2{get;protected set;}--可选
公共字符串Notneed3{get;protected set;}--可选
公共字符串Notneed4{get;protected set;}--可选
公共字符串Notneed5{get;protected set;}--可选
公共字符串Notneed6{get;protected set;}--可选
公共IUser椅子{get;protected set;}--必须具有
公共列表用户{get;protected set;}--必须具有
public bool isBoardRelated{get;protected set;}--必须具有
公共列表{get;protected set;}——如果是与isBoardRelated相关的,则必须具有
私有void CheckInvariants()
{
if(blah==null&&…等)
{
抛出新的ModelInvariantCheckException(“抓住我哭”);
}
}
}
那么,以下内容是否应该只向用户提供一个构造函数和一个更新方法,并指定所有字段?还是应该使用多个构造函数?允许某些属性(可选属性)使用公共设置器会导致不一致吗

或者人们更喜欢使用必须稍后调用的isValid方法


我必须说,我的首选是使用不变量检查,因为它感觉更安全,但必须将每个属性都添加到构造函数和更新方法中,这使得在层之间调用时,甚至在对象设置时,速度要慢得多。由始终有效的类组成的集合加剧了这种情况。

在实践域驱动设计时,您希望避免使用大型更新方法。更新方法不会捕获域的语言-它们会将数据库语言带入域。尝试使语言明确化,您将能够提取值对象、不变量和改变实体状态的意图揭示方法


也许你能找到一些灵感。

在实践领域驱动设计时,你希望避免使用大型更新方法。更新方法不会捕获域的语言-它们会将数据库语言带入域。尝试使语言明确化,您将能够提取值对象、不变量和改变实体状态的意图揭示方法


也许你能找到一些灵感。

在实践领域驱动设计时,你希望避免使用大型更新方法。更新方法不会捕获域的语言-它们会将数据库语言带入域。尝试使语言明确化,您将能够提取值对象、不变量和改变实体状态的意图揭示方法


也许你能找到一些灵感。

在实践领域驱动设计时,你希望避免使用大型更新方法。更新方法不会捕获域的语言-它们会将数据库语言带入域。尝试使语言明确化,您将能够提取值对象、不变量和改变实体状态的意图揭示方法

也许你能找到一些灵感