2013-09-02 1 views
0

나는 같이 갈 몇 가지 예 보았다 :중첩 클래스의 컬렉션을 가져 오지 않으면 중첩 클래스의 장점은 무엇입니까?

public class Customer 
{ 
public int ID { get; set; } 
public string FirstName { get; set; } 
public string LastName { get; set; } 
public Address Address { get; set; } 
} 
public class Address 
{ 
public string Street { get; set; } 
public string City { get; set; } 
} 

을 그리고 난 아직도 다음을 통해 어떤 장점 알아낼가 없습니다 그것에 대해

public class Customer 
{ 
public int ID { get; set; } 
public string FirstName { get; set; } 
public string LastName { get; set; } 
public string Street { get; set; } 
public string City { get; set; } 
} 

어떤 아이디어?

건배.

+0

데이터베이스 정규화에 대해 알아보십시오. http://en.wikipedia.org/wiki/Database_normalization – MarcinJuraszek

답변

0

당신이 보여준 예는 중첩 된 클래스가 아니라 구성을 통해 다른 클래스의 속성 만들기 사용.

귀하의 예제의 주요 장점은 Address는 별도의 엔티티 (리팩토링은)이며, 대한 주소의 다른 분류를 표시하기 위해 사용 될 수있는 Customer는 예를 들어, 고객이하는 Business AddressHome Address이있을 수 있습니다 부여 은 Address 클래스입니다. Corporate Address입니다.

그렇지 어렵다 별도 Address 클래스 분류를하지 않고 종류 이상 달성하고 그 Address 별개의 클래스로 인출되는 하나의 이유이다. 당신의 Address 엔티티가 나중에 또 ZipCode을 필요로하는 경우 당신이하지 않는, 위의 예에 따라, 이제

public class Customer 
{ 
    public int ID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public Address HomeAddress { get; set; } 
    public Address BusinessAddress { get; set; } 
    public Address CorporateAddress { get; set; } 
} 

: 그림으로

, 당신의 Customer 클래스는 장점을 보여주기 위해 다음과 같이 수정 될 수있다 3 개의 우편 번호를 추가해야합니다 (집 1 개, 사업 1 개, 회사 1 개). Address 클래스에 ZipCode 속성을 추가하고 Customer 클래스의 3 가지 속성은 Customer 클래스를 수정하지 않고 새 속성을 사용합니다.

+0

고마워요! 좋은 설명. –

2

클래스가 중첩되어 있지 않고 구성 만 사용됩니다. 컴포지션이 하나 이상의 다른 클래스에서 클래스를 작성 중입니다. 이점은 물론 재사용입니다.

Address 클래스를 다른 클래스 또는 메서드에서 사용할 수 있으며 Address 클래스에 있어야하는 모든 논리 및 데이터도 캡슐화합니다.

중첩 된 클래스는 다음과 같이 기록 할 수 원하는 경우 :

public class Apple 
{ 
    public int Mass; 
    public Worm MyWorm; 

    public class Worm 
    { 
     public string Name; 
    } 
} 
+0

중첩 된 클래스를 알려 주셔서 감사합니다. –

관련 문제