模拟只读对象的优雅设计

时间:2009-11-12 06:30:04

标签: c# oop mocking

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

上下文

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

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

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

问题

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

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

这些似乎都不适合我。

由于

1 个答案:

答案 0 :(得分:0)

您可以编写一个接口,使用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; }
}