关于数据封装的C#设计问题

关于数据封装的C#设计问题,c#,oop,design-patterns,encapsulation,C#,Oop,Design Patterns,Encapsulation,我有四门课: 1:拥有数据的人 2:更新数据的另一个 3:第三,由第一方告知数据的某些变化 4:读取第一个类中某些属性的最后一个类 除了第二个类之外,我不希望其他任何类能够更新数据。 那么,这里使用的最佳设计模式是什么 有关该问题的更多信息: 第一个类称为Schema,它包含使用该Schema的实例数的计数器。 第二个类称为工厂,它创建/删除这些实例,因此我需要更新架构实例计数器,并在必要时创建新的架构对象。 第三个类称为Config,它保存各种共享配置,包括关于每个新模式对象的信息。 第四个类

我有四门课:
1:拥有数据的人
2:更新数据的另一个
3:第三,由第一方告知数据的某些变化
4:读取第一个类中某些属性的最后一个类

除了第二个类之外,我不希望其他任何类能够更新数据。
那么,这里使用的最佳设计模式是什么

有关该问题的更多信息:
第一个类称为Schema,它包含使用该Schema的实例数的计数器。
第二个类称为工厂,它创建/删除这些实例,因此我需要更新架构实例计数器,并在必要时创建新的架构对象。
第三个类称为Config,它保存各种共享配置,包括关于每个新模式对象的信息。
第四个类称为视图,它只是查看模式信息。

模式对象可以通过ID访问,因为它们保存在一个静态列表中。

这是对您的场景的非常抽象的描述,很难看到您的问题以及您想要做什么

当谈到“oop”时,通常只有一个类来描述对象。在您的情况下,您的对象是“数据”。因此,您的第一个类应该是数据,并封装对该数据的任何操作

类描述对象-它们不是函数的集合。听起来你的第二个类只是一个函数的集合


您需要进一步描述您的情况,因为它目前确实没有太多解释。

从过程代码切换到面向对象代码,并将前两个类合并为一个既有数据又有行为的类。

不确定模式(可能?)名称,但基本上您有:

1:拥有数据的人(数据更改时触发事件)

2:另一个用于更新数据的

第三个类基本上是您的“客户机代码”——使用其他代码的代码(在本例中,类1)可以是订阅第一个类的事件的任何类


编辑:我认为您所描述的可能与模式非常接近。

这里不需要设计模式。只是一些原则

想法很简单:

对象由其行为定义
对象只修改自身的状态
对象保护其状态

public class SecondClass{
  public FirstClass First{get;private set;}
  public ThirdClass Third{get; private set;}
  public void DoSomething(){
    First.Something++;
    Second.NotifySomethingHasBeenDone();
  }
}
如果第二类和第三类之间的关系不是那么直接,您可能希望使用事件来通知:

public class SecondClass{
  public FirstClass First{get;private set;}
  public void DoSomething(){
    First.Something++;
    RaiseEvent<SomethingHasBeenDone>(this);
  }
}

public class ThirdClass:IHandles<SomethingHasBeenDone>{
  public void Handle(SomethingHasBeenDone @event){
    MessageBox("First has {0} something".With(@event.First.Something));
  }
}
公共类第二类{
公共第一类第一{get;私有集;}
公共无效剂量测定法(){
首先,一些++;
提高(这个);
}
}
公共类第三类:IHandles{
公共无效句柄(SomethingHasBeenDone@event){
MessageBox(“First has{0}something.With(@event.First.something));
}
}

第二个类以及只有该类可以更改第一个类的属性的原因是什么。为什么该代码不在第一类中(并负责封装)?