2012-11-12 41 views
3

想要征集关于继承的构成是否在这里有意义,如果是的话,这是一个好方法。在这种情况下继承的构成?

我有一个接口,像这样:

public interface IUser 
{ 
    string FirstName {get; set} 
    string LastName {get; set} 
} 

有一个“高级”的用户界面,以及,它具有相同的字段IUSER,但有一些附加功能。 ******中国,EmailAddress的等

应该从IUser这个IAdvancedUser接口继承并添加自己的属性,或将含有IUser一个实例中,以及如何使用setter注入来实例化成员,意义呢?如果是后者,是否有一些.Net/C#习惯用法在这种情况下运行良好 - 例如,通过包装或其他方法将IUser成员公开为IAdvancedUser

这些是DTO对象,它们中不会有方法,只有属性。

回答

2

答案是:必须是IAdvancedUser永远是IUser

在这种情况下:不,使用继承。

但是,“composition over inheritance”不适用于接口,因为它们不遵循与类相同的规则。

你可以例如这样做:

interface IAdvancedFeatures 
interface IUser 
interface IAdvancedUser : IUser, IAdvancedFeatures 

这样,你就可以使任何东西来实现先进的功能,而不是迫使它是用户,而在其他情况下,每个人都必须的高级用户。

我通常会尝试将界面视为定义功能而非角色。所以你可以说你应该喜欢作文(比如我的作品IAdvancedUser),但不是和作文类似(你在内部编写作品)。