想要在这里征集构成而不是遗产是否有意义,如果是这样,那么这是一个很好的方法。
我有这样的界面:
public interface IUser
{
string FirstName {get; set}
string LastName {get; set}
}
还有一个'高级'用户界面,它与IUser具有相同的字段,但有一些附加功能。 PhoneNumber,EmailAddress等
此IAdvancedUser
接口是否应继承自IUser
并添加自己的属性,或者在其中包含IUser
的实例,并使用setter注入实例化该成员,请注意好?如果是后者,是否存在一些在这些情况下运行良好的.Net / C#习语 - 例如,通过包装或其他方法将IUser
成员公开为IAdvancedUser
成员?
这些是DTO对象,其中没有方法,只有属性。
答案 0 :(得分:2)
答案是:IAdvancedUser
必须始终是IUser
吗?
在这种情况下:不,使用继承。
但是,“composition over inheritance
”不适用于接口,因为它们不遵循与类相同的规则。
你可以这样做:
interface IAdvancedFeatures
interface IUser
interface IAdvancedUser : IUser, IAdvancedFeatures
通过这种方式,您可以启用任何功能来实现高级功能,而不是强制它成为用户,而在其他情况下,每个人都必须是高级用户。
我通常会尝试将接口视为定义功能而不是角色。所以你可以说你应该赞成组合(比如我的IAdvancedUser
),但不是和类(你在内部组成)的意义相同。