2017-01-27 2 views
1

나는 계층 적 재정의 설정 시스템을 위해 두 개의 다른 엔터티 (클래스)에서 필요한 20 개의 속성 집합을 가지고 있습니다.일반적인 속성을 이동하는 올바른 방법

내가 생각할 수있는 간단한 생각은 20 가지 공통 속성을 가진 추상 클래스를 만들고 두 엔티티 모두에서 추상 클래스를 상속한다는 것입니다.

하지만 모든 엔티티에 공통적 인 몇 가지 공통 속성이 있으므로 작동하지 않을 것입니다. 그래서 저는 이미 모든 개체를 상속 받고 있습니다. 그리고이 20 개의 속성은 모든 엔터티에 공통적 인 것은 아닙니다 (단 두 개 - 세 개). 따라서 나는 기존 추상 클래스에 20 개의 속성을 추가 할 수 없다.

인터페이스를 만들고 구현했지만 인터페이스 클래스를 구현해야한다는 것을 잊어 버렸습니다. 따라서 구체적인 클래스로 정의해야한다면 문제가 해결되지 않습니다.

아이디어가 있으십니까? 그렇게하는 올바른 방법은 무엇입니까? 가까운 장래에 나는 몇몇 엔티티에 공통 속성을 좀 더 가질 수 있습니다. 그렇다면 각 개체의 공통 속성을 다시 방문하고 다시 작성하지 않고 공통 속성간에 일관성을 유지하려면 어떻게해야합니까?

+1

상속 대신 합성은 어떻습니까? – CrudaLilium

+0

@CrudaLilium EF 클래스를 정의하기 위해 수행하는 것처럼 잘 합성되지 않습니다. –

답변

2

"공통 설정"클래스가 "공통 엔터티"클래스에서 상속 받도록하십시오. 그런 다음 공통 설정 클래스에서 설정 클래스를 가져옵니다.

class common_entity {} 

class common_settings : common_entity {} 

class settings : common_settings {} 

class entity : common_entity {} 
+0

글쎄, 그런 식으로 모든 공통 서클에 대한 많은 수업을 만들어야합니다. 이것이 올바른 접근 방법입니까? –

+0

귀하의 문장을 이해할 수는 없지만 귀하의 질문에 대한 답변은 예, 올바른 접근 방식입니다. –

0

어쩌면 내가 잘못 생각한 것일 수도 있지만 때로는 재사용 성을 너무 많이하는 경향이 있습니다.

이 샘플 코드를 참조

public class Person 
{ 
    public string Name { get; set; } 
} 

public class Company 
{ 
    public string Name { get; set; } 
} 

그리고 우리는 두 클래스는 Name 속성을 공유하고 있다고 생각하기 때문에 단지, 우리는 기본 클래스를 만들어야합니다

public class Entity 
{ 
    public string Name { get; set; } 
} 

public class Person : Entity 
{ 
} 

public class Company : Entity 
{ 
} 

내가 결정적으로 기본 엔티티 클래스를 정의 할을 어떤 엔터티도 고유 한 식별자를 소유해야하지만 Name은 소유하지 않아야합니다. 엔티티의 서브 세트가 Name을 소유해야하는 경우 구체 엔티티에 의해 구현되거나 구현되지 않을 interface을 정의합니다. 나중에 객체가 특정 인터페이스 (예 : obj is IWhatever 또는 var whatever = obj as IWhatever)를 구현하는지 물어 봅니다.

여러분이 이미 자신의 솔루션에서 언급했듯이 일부 동작은 코드 재사용 성을 증가시킬 수 있지만 디자인을 부정적으로 제한 할 수 있습니다.

나는 두 다른 엔티티

그래서 당신은 이 개 클래스를했습니다에 필요한 그 중 약 20 특성의 집합이 있습니다

은 그냥 당신이 말한 내용을 확인 20 개의 속성을 구현해야하며 interface을 정의 할 수 있고 두 클래스에 구현해야하므로 머리를 긁적니다.

interface으로 이동하십시오. Visual Studio에 인터페이스 구현 코드 생성 기능이 있습니까?

는 OOP에 대한 일반적인 비판은 OOP의 핵심은 당신이 당신의 코드 간단한하고 이해를 유지하는 경우 더 많은 코드가 적은 유지 보수을 의미하지 않는다는 것입니다 동안, 더 많은 코드를 생산하고 끝낼 것이라고 생각합니다. 그것은 덜 코딩에 관한 것이 아니라 올바르게 코딩합니다..

+0

고마워요. 이제는 제게 더 의미가 있습니다. 나중에 일반적인 20 가지 속성에 더 많은 속성을 추가 할 수 있으므로 일반적인 코딩 (코딩의 단일 지점) 방법을 찾고 있습니다. 한 클래스에서 추가하고 다른 클래스에서 추가하는 것을 잊지 않으려는 것입니다. 따라서 이러한 일반적인 속성을 정의하는 공통점을 유지하면 나중에 번거 로움을 덜 수 있습니다. –

관련 문제