내 디자인에 (안티) 패턴이 보이십니까? 패턴을 인식하는 방법?

StackOverflow https://stackoverflow.com/questions/1012967

  •  06-07-2019
  •  | 
  •  

문제

ABAP / BSP로 코딩 된 웹 앱이 있습니다. 나는 훌륭한 코드를 제공하는 데 관심이 있으므로 아마도 내가 좋은 패턴이나 나쁜 패턴을 인식하도록 도울 수 있습니다. 사실 나는 다음을 따릅니다. 기본 클래스 객체를 선언하고 하위 클래스의 일부 매개 변수를 기반으로 동적으로 인스턴스화하십시오. 기본 클래스에는 데이터 fetching ()에 대한 몇 가지 방법이 있습니다 () 하위 클래스는이 데이터를 사용하여 조작 할 수 있습니다.

여기에 빠른 기본 그림 (죄송합니다. 표준이나 언어에 따라 생각하지 말고 아이디어를 주어야합니다).

Alt Text http://img35.imageshack.us/img35/4351/designkdp.jpg

이런 일이 괜찮습니까? 알려진 패턴이 숨겨져 있습니까? 아니면 패턴을 리팩터링하고 사용해야합니까? 나는 여기서 몇 가지 제안을 좋아합니다. 나는 이미 Wikipedia 기사를 읽었지만 패턴이 정확히 맞지 않는다. (또한 일부 책을 주문했지만 너희들은 확실히 더 빠릅니다 :))

도움이 되었습니까?

해결책

그것은 보인다 공장 방법

다른 팁

베이스 클래스와 서브 클래스는 나에게 무언가를 가지고있는 것 같습니다 (pseudocode)

interface IDataProvider{
  GetData();
}

class SubClass1 implements IDataProvider{
  GetData(){
     ...
  }
}

당신이 사용하는 인스턴스화 전략은 공장. 당신이 할 수있는 일은 일부 htmlrenderingengine 또는 무엇이든 렌더링을 배치하는 것입니다 (ABAP/BSP에 익숙하지 않음). 프레젠테이션이 나머지 논리에서 분리되어 있습니다.

이것은 Gamma, Helm, Johnson 및 Vlissides의 "디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소"의 공장 패턴입니다.

상속은 재미 있지만 최후의 수단으로 사용해야합니다. 나는 당신이 한 방식으로 할 수 없다고 말하는 것이 아닙니다. 당신의 솔루션은 완전히 유효하지만 대안을 제안하기 위해 ...

ProcessData 객체를 설정할 수있는 "Dataclass"가 있으면 어떻게해야합니까? ProcessData 객체는 실제로 단일 메소드 "ProcessData"가있는 인터페이스입니다.

getData를 호출하면 다음과 같이 보일 수 있습니다.

if(processDataObject == null)
    return getInformation();
else
    return processDataObject.processData(getInformation());

도대체, "Passthrough"ProcessData 객체가 정의 된 경우 아무것도 수행하지 않고 기본 "ProcessDataObject"로 사용하는 경우 전체 getData 메소드가됩니다.

return processDataObject.processData(getInformation());

이를 통해 클래스의 역동적 인 생성이 원하는 모든 유형의 처리를 수행 할 수 있습니다.이 디자인 위에 구축 한 작업을 단순화합니다.

이 스타일의 디자인은 나에게 시간이 걸렸으며, 처음에는 상속을 피하는 아이디어가 마음에 들지 않을 수도 있습니다. 상속을 사용하는 것은 요즘 매우 드 rare으며, 그것을 사용할 때, 그것은 항상 매우 얕은 나무에 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top