有关数据封装的 C# 设计问题
本文关键字:问题 数据封装 | 更新日期: 2023-09-27 17:55:38
我有四个类:
1:拥有数据
2:另一个更新数据
3:第三个由第一个通知数据的某些变化
4:最后一个从第一个类读取某些属性
但第二个类能够更新 data.
那么在这里使用的最佳设计模式是什么?
更多关于问题的信息:
第一个类称为模式,它包含一个计数器,其中包含使用该架构的实例数.
第二个类称为工厂,它创建/删除这些实例,因此我需要更新架构实例计数器并在必要时创建新的架构对象><。第 3 类称为 Config,它包含各种共享配置,包括有关每个新架构对象的信息.
第 4 个类称为 View,它只是查看架构信息.
架构对象可以通过 ID 访问,因为它们保存在静态列表中.
从过程代码切换到面向对象的代码,并将前两个类合并为一个同时具有数据和行为的类。
这是对方案的非常抽象的描述,因此很难看到您的问题和您想要执行的操作。
当谈论"oop"时,你通常会有一个描述对象的类。 在您的情况下,您的对象是"数据"。 因此,您的第一个类应该是数据,并封装对该数据的任何操作。
类描述对象 - 它们不是函数的集合。听起来你的第二个类只是函数的集合。
您将需要进一步描述您的情况,因为目前它真的不能解释太多。
这里不需要设计模式。只是一些原则。
想法很简单:
对象由其行为
定义 对象仅修改自身的
状态 对象保护其状态
public class SecondClass{
public FirstClass First{get;private set;}
public ThirdClass Third{get; private set;}
public void DoSomething(){
First.Something++;
Second.NotifySomethingHasBeenDone();
}
}
如果 2nd 和 3rd 类之间的关系不是那么直接,您可能希望使用事件来通知:
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));
}
}
不确定模式(也许是这个?)名称,但基本上你有:
1:拥有数据的人(在数据更改时触发事件)
2:另一个更新数据
第 3 类基本上是您的"客户端代码" - 使用其他代码的代码(在本例中为 1 类)可以是订阅第一类事件的任何类
编辑:我认为您所描述的内容可能接近访问者模式。