C# 接口实现测试是否是良好的设计?
我有一个相当笼统的问题。有几个类可能实现一个公共接口,但没有其他共同点,并且测试接口是否实现以执行某些操作,这是好的设计还是坏的设计 示例:C# 接口实现测试是否是良好的设计?,c#,C#,我有一个相当笼统的问题。有几个类可能实现一个公共接口,但没有其他共同点,并且测试接口是否实现以执行某些操作,这是好的设计还是坏的设计 示例:Builder对象可以在外部配置为Something子类的实例。这些子类中的一些有一个特殊的BuildCommand方法,有些没有。如果当前的Something没有BuildCommand方法,Builder应该使用Target类中定义的默认BuildCommand方法 我不确定我的解决方案是好是坏。我很感激你的意见 多谢各位, 费边 如果需要IComman
Builder
对象可以在外部配置为Something
子类的实例。这些子类中的一些有一个特殊的BuildCommand
方法,有些没有。如果当前的Something
没有BuildCommand
方法,Builder
应该使用Target
类中定义的默认BuildCommand
方法
我不确定我的解决方案是好是坏。我很感激你的意见
多谢各位,
费边
如果需要
ICommandBuilder
,请使用ICommandBuilder
类型的属性,这将明确您的依赖关系:
public class TargetBuilder
{
public ICommandBuilder CommandBuilder { get; set; }
public Something Something { get; set; }
public Target CreateTarget()
{
var target = new Target();
/* Some code to configure target */
var commandBuilder = CommandBuilder ?? target;
target.AddCommand(commandBuilder.BuildCommand());
return target;
}
}
您可以将对象的同一实例分配给某物
和CommandBuilder
属性。有两个不同的属性用于两个不同的目的在我看来很清楚。没有检查某物是否实现ICommandBuilder
的隐藏功能
您甚至可以创建构造函数,它将接受同时实现Something
和ICommandBuilder
的类型,以简化两个属性的分配:
public TargetBuilder()
{
}
public TargetBuilder(Something2 something2)
: this(something2, something2)
{
}
public TargetBuilder(Something something, ICommandBuilder commandBuilder)
{
Something = something;
CommandBuilder = commandBuilder;
}
不,有些东西更有用。BuildCommand方法是类中相当小的一部分。@fdub这就是为什么我写了关于将同一实例分配给两个属性的内容实例是通过反序列化xml文件创建的。根据您的建议,我不知道它是哪个子类,我必须再次执行显式类型或接口检查以设置CommandBuilder属性。我也不能使用显式子类,因为它们不断变化(有些被删除,有些被添加)。@fdub您将问题指定为相当一般的问题,但没有提到任何xml反序列化。我提供了相当一般的代码,我会使用Sergey,只是示例比较具体,问题本身是指一般性的。也许这不是最好的例子来说明这个问题。如果一些子类实现了ICommandBuilder
,而有些子类没有实现,那么我不喜欢我的实现中的隐藏特性(感谢这个术语!)。在不知道所有子类的情况下,无法知道某些东西
可能与ICommandBuilder
相关。。。我喜欢CommandBuilder
属性的想法,并将尝试找到实现它的方法。谢谢。请避免使用诸如Something1
、Something2
等名称。阅读起来确实很痛苦。
public TargetBuilder()
{
}
public TargetBuilder(Something2 something2)
: this(something2, something2)
{
}
public TargetBuilder(Something something, ICommandBuilder commandBuilder)
{
Something = something;
CommandBuilder = commandBuilder;
}