개체가 있다고 가정 해 보겠습니다. 차별화 된 여러 가지 방법이 있습니다. 어쩌면 얼룩 같아 질지 모르지? (반 패턴에서와 같이 "blob") 이러한 메서드는 별개의 세트로 작동하며 실제로 기능을 수행하지는 않습니다.새로운 방법은 어디에 있습니까?
Car
# methods related to suburban driving
->foo1
->foo2
# methods related city driving
->bar3
->bar4
자 이제 내 차 객체가 지원할 수있는 사례 중 하나 인 "도로 주행 중"을 추가하고 싶다고 가정 해 보겠습니다. 만약 내가 Car 객체에 메소드를 추가한다면, 더 많은 BLOB를 만드는 것이 아닌가?
Car (augmented)
# methods related to suburban driving
->foo1
->foo2
# methods related city driving
->bar3
->bar4
# methods related off road driving
->blah5
->blah6
해야하는 I :
A : 서브 클래스 자동차. 내가 OffRoadCar 자동차 개체를 확장 할 수 있습니다. 그러나 Car와 OffRoadCar가 동일한 데이터/상태를 공유하고 메소드에 의해서만 다른 경우에는 어떻게 될까요? OffRoadCar는 자동차보다 구체적으로 "작동"하지만 더 이상 구체적으로 설명되지 않으며 고유 한 필드가 없습니다. 따라서 OffRoadCar를 인스턴스화하는 것은 의미가 없습니다.
OffRoadCar extends Car
# methods related off road driving
->blah5
->blah6
B : 정적 메소드 차량용 소비한다. OffRoadAdventure-> Embark (자동차)처럼. 따라서 OffRoadAdventure 클래스는 Car 객체를 가져 와서 그 객체를 사용합니다.
C#에서는 이것을 확장 메서드라고 부릅니다.
다른 방법으로 넣으십시오. 블롭 반 패턴에 대한 해결책은 무엇입니까? 서브 클래 싱인가요? 확장 메소드입니까?
또 다른 이유는 내가 다른 클래스/패키지를 포함하는 것과 같이 비용이 발생한다면 어떻게해야할까요? 핵심 수업의 사용자가 결코 사용하지 않을 무언가를 끊임없이 지불하는 것을 원하지 않습니다. 소수에 대한 비용을 명시하는 것이 대다수의 비용 절감에 가치가 있다고 생각합니다. 그리고 의존성 그래프가 더 정확 해집니다 (blob과 유사하지 않습니다).
PS - 구현 언어는 Perl입니다.
자동차는 수업이어야합니까? 자동차가 실제로 ICar (인터페이스) 일 수 있습니까? 나는 상속에 대한 구성의 경로를 제안 할 것이다. – OnResolve
자동차는 이미 사용중인 실제 수업입니다. (실제로 ORM 아티팩트입니다.) –