我有一个名为IProjectUser的接口,它定义了一个读取函数和一个用于读取和写入项目文件的写入函数。我还有一个名为Project的类,它包含一个IProjectUser对象的通用列表来管理项目文件。这两个都在类库Project.dll中。
我还有一个名为A.dll的类库,它包含一个名为Foo的类,它实现了IProjectUser。读取/写入项目文件的能力是此类的次要能力。它保存并操纵一些数据。 A.dll引用Project.dll。
该应用程序还包含一些实现IProjectUser的表单和其他类。
我可以想象将来我可能想要在另一个不使用项目文件的项目中使用A.dll的情况。但是我会被迫包含Project.dll,因为A.dll需要它。即使功能是可选的。
是否有不同的设计模式可以让我基本上选择一个接口?
我希望我能够清楚地解释这一点。
更新
如何将对象转换为接口?这将打开接口未正确实现的可能性。对于这类问题,这是一种好的还是坏的设计方法?
if (Foo is IProjectUser) {
ProjectUsers.Add(Foo as IProjectUser);
// etc
}
答案 0 :(得分:2)
使用继承或多个接口。你不能使接口方法可选。
答案 1 :(得分:1)
将对象强制转换为未实现的接口将无效 - 您最终会在变量中使用null值。如下所示,使用正确的设计并添加B.dll有什么问题? A.dll变得完全可重用,你仍然可以使用一个实现IProjectUser的Foo版本。