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

本文关键字:问题 数据封装 | 更新日期: 2023-09-27 17:55:38

我有四个类:
1:拥有数据
2:另一个更新数据
3:第三个由第一个通知数据的某些变化
4:最后一个从第一个类读取某些属性

我不希望任何其他类,

但第二个类能够更新 data.
那么在这里使用的最佳设计模式是什么?

更多关于问题的信息:
第一个类称为模式,它包含一个计数器,其中包含使用该架构的实例数.
第二个类称为工厂,它创建/删除这些实例,因此我需要更新架构实例计数器并在必要时创建新的架构对象><。第 3 类称为 Config,它包含各种共享配置,包括有关每个新架构对象的信息.
第 4 个类称为 View,它只是查看架构信息.
架构对象可以通过 ID 访问,因为它们保存在静态列表中.

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

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

这是对方案的非常抽象的描述,因此很难看到您的问题和您想要执行的操作。

当谈论"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 类)可以是订阅第一类事件的任何类

编辑:我认为您所描述的内容可能接近访问者模式。