【问题标题】:Elegant design of simulating a read-only object模拟只读对象的优雅设计
【发布时间】:2009-11-12 06:30:04
【问题描述】:

我目前正在为嵌入式系统开发GUI(我使用 GUI 来描述我的应用程序与界面相反,以避免与程序含义混淆)

上下文

我创建了一个模拟嵌入式系统的类。我通过我设计的 Connection 类进行所有通信,该类可以通过 TCP/Serial 或两个 Connection 对象之间的虚拟连接进行通信。

这一切都很好,正如预期的那样,我的模拟对象和GUI通过虚拟连接进行通信。

我有一个Diagnostic 数据包,它从device(真实或模拟)发送并由GUI 读取。这非常适合我称之为 ControllerDiagnostic 的类。

问题

我的问题与ControllerDiagnostic 课程有关。在GUI 方面,所有属性都应该是只读的(反序列化是通过直接在私有字段上的反射完成的)。在模拟方面,它们显然需要是可变的。那么我该如何优雅地处理呢?我考虑过:

  • 创建一个模仿 ControllerDiagnostic 但公开字段设置的全新类。
  • ControllerDiagnostic protected 中创建所有字段,然后继承到私有嵌套类中,该类为模拟类中的这些字段提供访问器。
  • 创建仅包含两个类并使用 Internal 设置器的程序集。
  • 将属性保留为读/写并记录 GUI 不应修改它们。
  • 重写 C#,这样我就可以像在 C++ 中一样使用friend

这些对我来说都不理想。

谢谢

【问题讨论】:

    标签: c# oop mocking


    【解决方案1】:

    您可以编写一个接口,使用 getter 和 setter 公开您的类的所有属性,并编写一个仅公开所有属性的 getter 的第二个接口。然后让一个类实现这两个接口并在 GUI 中使用 getter-only 接口。

    在看起来有点像这样的代码中:

    public interface IReadWrite
    {
        string SomeString { get; set; }
    }
    
    public interface IReadOnly
    {
        string SomeString { get; }
    }
    
    public class TestClass : IReadWrite, IReadOnly
    {
        public string SomeString { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多