2016-09-29 2 views
0

지금 큰 프로젝트를 진행 중입니다.많은 고객 별 예외가있는 Python의 디자인 패턴

이 프로젝트는 EDIFACT 메시지를 생성합니다. 이것은 처음에는 그렇게 어렵지 않지만, 표준을 독자적으로 구현 한 고객이 많습니다. 우리는 여러 EDIFACT 표준 작업하는 그 꼭대기에

(우리의 경우 D96A 및 D01B.)

일부 고객의 예외 발산 필드 길이만큼 작을 수도 있지만, 일부는 완전히 자신의 구현을 만들었습니다 다른. 이 순간

우리는 (그냥 일관성을 유지하기 위해) 목록에서 고객의 예외를 나열하고 코드에서 우리는 같은 것을 사용이 잘 작동 간단한 몇 가지 예외를 들어

if NAME_LENGTH_IS_100 in customer_exceptions: 
    this.max_length = 100 
else: 
    this.max_length = 70 

을, 하지만이 순간에 코드가 복잡해지기 시작하면서 코드를 리팩터링 할 생각입니다.

나는 어떤 종류의 공장 패턴에 대해 생각하고 있지만 구현 방법에 대해서는 확신 할 수 없습니다. 또 다른 옵션은 기본 패키지를 만들고 표준에서 벗어나는 모든 고객에 대해 별도의 구현을 만드는 것입니다.

누군가가 조언을 해줄 수 있기를 바랍니다.

미리 감사드립니다.

답변

0

표준을 기본값으로하고 각 예외 핸들을 높은 값으로 리소스 파일에 넣지 않는 이유는 올바른 클라이언트의 올바른 키를 읽고 코드를 깨끗하게 유지해야합니다.

1

귀하의 질문이 너무 광범위하여 적절하게 답변을받을 수 없다고 생각합니다. (이것 때문에 닫기 버튼을 클릭했지만 달리 결정했습니다.) 그 이유는 다음과 같습니다.

제공 한 코드 스 니펫에는 아무런 이상이 없습니다. 그것은 일종의 초기화 루틴의 일부 여야합니다. 그렇다면 이것은 잘된 방법입니다. 그것은 또한 다량으로 이것 같이있는 것을 낙상하지 않는다.

그러나 복잡한 사례를 처리하는 방법은 사례별로 크게 다릅니다.

  • 많은 경우에있어 고객의 특별한 선택을 나타내는 변수가 있으면 충분할 수 있습니다.
  • 다른 측면에 대해서는 서브 클래스가있는 Customer 기본 클래스를 각 고객에게 (또는 고객이 계층 적으로 그룹화 할 수있는 경우에도 훌륭한 상속 트리가이를 반영 할 수 있도록) 제안해야합니다.
  • 다른 경우에도 메소드, 함수 및 클래스의 비헤이비어를 조정하기 위해 파이썬 장식을 사용하여 aspect 지향 프로그래밍을 제안합니다.

이 내용은 구체적인 용도에 따라 크게 달라 지므로이 질문에 이보다 더 구체적으로 대답 할 수는 없습니다.