2012-11-12 3 views
3

상속을 통한 구성이 여기에 적합한 지 여부를 묻고 싶으면 여기를 클릭하십시오. 거기에 '고급'사용자 인터페이스 IUSER와 같은 필드를 가지고있는뿐만 아니라,하지만 약간의 엑스트라이 경우 상속에 대한 구성?

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

:

나는 인터페이스과 같이 있습니다. PHONENUMBER, EmailAddress를 등

IAdvancedUser 인터페이스 IUser에서 상속하고 자신의 속성을 추가 할 경우, 또는 그 안에 IUser의 인스턴스를 포함하고, 해당 멤버를 인스턴스화뿐만 아니라 이해하는 세터 주입을 사용하는 것? 후자의 경우 이러한 상황에서 잘 작동하는 .Net/C# 관용구가 있습니까? 예를 들어 IUser 구성원을 배치하거나 다른 방법을 통해 IAdvancedUser 개로 노출하면 어떻게됩니까?

이들은 DTO 개체이며 메서드 만 가지며 속성 만 가질 수 있습니다.

답변

2

답변은 다음과 같습니다. IAdvancedUser은 항상 IUser이어야합니까?

이 경우 : 아니오, 상속을 사용하십시오.

그러나 "composition over inheritance"은 클래스와 동일한 규칙을 따르지 않으므로 인터페이스에는 적용되지 않습니다.

당신은 예를 들어이 작업을 수행 할 수 있습니다 :

interface IAdvancedFeatures 
interface IUser 
interface IAdvancedUser : IUser, IAdvancedFeatures 

당신이 다른 경우에는 모든 사람이 사용자를 진행해야하지만, 사용자 수를 강요하지 않으면 서 고급 기능을 구현하는 것도 가능하게 수있는 방법.

일반적으로 역할 대신 기능을 정의하는 것으로 인터페이스를 처리하려고합니다. 그래서 당신은 내 작문 (내 IAdvancedUser과 같은)을 선호해야한다고 말할 수 있지만, 클래스와 같은 의미는 아닙니다 (내부적으로 작문하는 곳).