내가 case 문을 통해 반복해서 같은 일에 근접하고 있던 일부 레거시 코드 리팩토링 오전 :이지옥 또는 수용 가능한 디자인?
(SameInterfaceCast).SetProperties(Prop1,Prop2,Prop3);
될 수 있도록 그래서
switch(identifier)
case firstIdentifier:
(SomeCast).SetProperties(Prop1,Prop2,Prop3);
break;
...
case anotherIdentifier:
(SomeDifferentCast).SetProperties(Prop1, Prop2, Prop3);
break;
을, 나는 고유의 인터페이스를 만들려고
그러나 일부 항목은 모든 속성을 사용하지 않는 것으로 나타났습니다. 그래서 나는 더 이런 일을 생각하기 시작했다 :
if(item is InterfaceForProp1)
(InterfaceForProp1).SetProp1(Prop1);
if(item is InterfaceForProp2)
(InterfaceForProp2).SetProp2(Prop2);
if(item is InterfaceForProp3)
(InterfaceForProp3).SetProp3(Prop3);
하고이 같은 클래스를 만들 수 있습니다
public class MyClassUsesProp2And3 : InterfaceForProp2, InterfaceForProp3
그러나, 내가 지나치게이 코드를 세분화하고 두렵다을하고 수 풍선 너무 많이. 어쩌면 본질적으로 하나의 방법 인터페이스가 될 것을 너무 두려워해서는 안되지만,이 길을 가기 전에 디자인 패턴을 놓치고 있는지 알고 싶습니다.
모든 속성이 고유 종류
UPDATE (꽤 권리 맞게 내 마음에 튀어하지만 있던 유일한 사람은 Decorator 또는 Composite 패턴이었다).
궁극적으로 이것은 의존성 주입의 한 형태입니다. 코드는 Ninject와 같은 것을 사용하기에는 너무 엉망이지만 나중에는 이들 중 일부를 없애고 주입 컨테이너를 사용할 수도 있습니다. 현재 변수를 설정하는 것 이상의 일을하는 논리가 있습니다. 이것은 모든 레거시 코드이며, 조금씩 조금씩 정리하려고하고 있습니다.
동일한 유형의 Prop1, Prop2 및 Prop3입니까? Interface1Prop1, InterfaceForProp2 및 InterfaceForProp3의 수퍼 클래스를 원한다고 생각하기 때문에 Prop1, Prop2 및 Prop3 유형의 인수를 취하는 SetProp() 메서드가 있습니다. – dmn
아마도 Prop1, Prop2 및 Prop3은 아직 개체로 표시되지 않은 도메인 개념의 속성입니다. 그러면 인터페이스가 단순해질 수 있습니다. – neontapir
@dmn 방금 모든 유형이 다르다는 것을 추가하여 질문을 업데이트했습니다. 그들이 모두 같았다면 이것은 케익이 될 것입니다. –