当我有多层类和接口时,我对使用接口提取的最佳方式感到有点困惑。假设我有以下层次结构:
Foo : WidgetBase, IWidget
WidgetBase: BusinessObject, IThingy
IThingy : IGenericObject现在我知道我必须将一个IFoo接口提取到一个单独的项目中;但是该接口结构必须复制真实的结构吗--这意味着我也必须为BusinessObject和WidgetBase提取接口?或者这是否意味着我应该在创建提取的接口时扁平化结构,创建一个接口,IFoo,包含与Foo及其所有父类和接口的属性相对应的属性,一直向上?
我的接口中也有一些枚举类型属性--我该如何最好地处理这些属性呢?
public interface IWidget
{
public WidgetType Type { get; set; }
}
public enum WidgetType
{
Big, Small
}请放出一些光芒。
发布于 2013-01-25 09:27:03
IFoo的最低要求
IFoo应该继承IWidget和IThingy。它还需要包括Foo和WidgetBase的所有公共成员。
public interface IFoo : IWidget, IThingy
{
// public member of Foo and WidgetBase...
}潜力重构1:
为WidgetBase定义一个接口可能更好,如下所示:
public interface IWidgetBase : IThingy
{
// public members of WidgetBase...
}那么IFoo就可以直接继承它:
public interface IFoo : IWidget, IWidgetBase
{
// public member of Foo.
}潜力重构2:
同样的道理也适用于BusonessObject:为它定义一个接口,并让IWidgetBase继承它。
通用原则:
你的接口应该指定你的对象的行为,并且应该在行为自然扩展的地方使用继承。
发布于 2013-01-25 10:21:01
我会根据你新界面的用途推荐你这样做。您希望IFoo具有哪些行为?换句话说,它在新项目中的用途是什么。提取仅够新项目使用的内容。不要把从其他接口或从Foo类的当前状态继承的IFoo搞乱了。
https://stackoverflow.com/questions/14513823
复制相似问题