当我有多层类和接口时,我对使用接口提取的最佳方法感到困惑。假设我有以下层次结构:
Foo : WidgetBase, IWidget
WidgetBase: BusinessObject, IThingy
IThingy : IGenericObject
现在我知道我必须将一个IFoo接口提取到一个单独的项目中;但是这个接口结构是否必须复制真实的结构 - 这意味着我还必须为BusinessObject和WidgetBase提取接口?或者这是否意味着我应该在创建提取的接口时展平结构,创建1个接口,IFoo,包含与Foo属性及其所有父类和接口相对应的属性,一直到层次结构?
我的界面中还有一些枚举类型属性 - 我怎样才能最好地解决这些问题呢?
public interface IWidget
{
public WidgetType Type { get; set; }
}
public enum WidgetType
{
Big, Small
}
请说清楚。
答案 0 :(得分:1)
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
继承该接口。
一般校长:
您的接口应该指定对象的行为,并且应该在行为自然扩展的地方使用继承。
答案 1 :(得分:0)
我会建议您根据新界面的用途。您希望IFoo拥有哪些行为?换句话说,它在新项目中的用途是什么。为新项目提取足够的内容。不要使用来自其他接口的继承或来自当前Foo类的状态来搞乱你的IFoo。