2014-10-06 3 views
-1

현재 여러 번 메서드를 구현해야하는지 또는 공통점이없는 개체에 인터페이스를 추가해야하는지 디자인을 결정하려고합니다.코드 중복 대 여러 인터페이스 추가

내 프로그램은 다음과 같이 구성되어있다 :

BaseObject (이름, 설명, ...) < - DocumentedObject (프로토콜, 설명서, ...) < - RealObject (만료, 위치, ...)

이들은 추상적 인 클래스입니다. 각각은 여러 아이를 가지고 예컨대 :

BaseObject :

  • 고객
  • 출하

DocumentedObject :

  • MyDocumentedObject

RealObject :

  • 제품

이 목록은 현실에서 우리는 ~ 20 개 클래스에 대해 얘기 만 예입니다.

응용 프로그램 자체의 아키텍처는 서비스 계층 (ProductService, CustomerService, ...) 위에 MVVM (ProductViewModel, CustomerViewModel, ...)입니다. obects가 많은 특성을 공유하기 때문에 계층 구조가 잘 작동합니다. 그러나 속성 외에도 일부는 컬렉션을 공유하지만 계층 구조와 일치하지 않습니다. 예 : 고객 및 제품에는 문서 목록이 있지만 MyDocumentedObject에는 없습니다.

나는 이러한 컬렉션을 관리하기위한 세 가지 옵션을 참조하십시오 (? 모두에서, 서비스에, 뷰 모델에)

  • 이 문서가 클래스에 인터페이스 "IHasDocuments"를 사용합니다.이 인터페이스는 컬렉션 문서
  • 마다
  • 하나 개의 문서 관리 방법을 구현하고 개체가 통과되어있다 유형을 확인 여분의 객체에 대한 (이 최악의 솔루션입니다 내 생각) 문서 관리 방법을 구현
을 포함

현재는 다음과 같습니다

BaseObject :

  • 고객 : IHasDocuments
  • 출하

DocumentedObject :

  • MyDocumentedObject : IHasItems

RealObject :

  • 제품 : IHasDocuments,
IHasItems

이제 20 개의 클래스와 5 개의 인터페이스 (5 개의 재배치 콜렉션이 있음)를 상상해보십시오. 이게 괜찮습니까? 아니면 제가 다르게 해결할 수 있습니까?

+3

코드 검토를위한 것 같아요. –

+0

이 인터페이스에 액세스 할 코드가 수행하는 작업에 크게 의존합니다. IComparable은 개체 구조의 분석에서 나온 것이 아니라 이러한 개체에서 작동하는 알고리즘/코드에서 필요한 것이 무엇인지 분석 한 것입니다. – AaronLS

+1

이 질문은 코드 검토에 관한 것이므로 해당 질문을 프로그래머 나 프로그래머에게 전달해야합니다. –

답변

1

이것은 잘못된 사이트이지만 인터페이스를 사용하는 방법이 필요하다고 생각합니다. 작고 밀접하게 정의 된 인터페이스는 훌륭하고 필요한 클래스에만 적용하면 원하는 것입니다.

또한 문서가있는 항목을 처리하는 방법을 알고있는 개체를 가질 수 있으며 IHasDocuments를 구현하는 항목 만 전달할 수 있으며 해당 고객이나 제품 인 경우에는 상관하지 않음을 의미합니다.

그래서 약 20 개의 클래스와 5 개의 인터페이스가 필요합니까? 그것이 당신의 모델이라면 그렇게 될 것입니다.

인터페이스는 원하는 기능의 일부 측면을 일관된 방식으로 처리하기위한 계약을 정의하며 객체의 공통점을 나타 내기 위해 사용되지 않습니다.

IComparable을 구현하는 개체에는 반드시 공통점이 없지만 서로 비교할 수 있습니다. 나 여기에

2

죽은 공짜이다 ... 나는 공통점이 아무 것도없는 개체에 인터페이스를 추가해야하는지 방법을 여러 번 구현하거나 ...

여러 클래스가 구현할 인터페이스를 정의 할 수 있다면 DO은 공통점이 있습니다. 그리고 동일한 코드를 여러 번 쓰는 것이 확실합니다.