2011-11-09 1 views
2

사용자가 페이지에서 볼 수있는 것을 제어하는 ​​클래스가 있습니다. 두 가지 상태가 있습니다. 첫 번째보기 집합은 사용자 개체에 의해 제어되며 해당 개체는 아래 항목을 제어합니다. 이 - 에서 로그인 한 - 로그인하지 않음 - 페이지 '좋아요'- 페이지가 다음 상태 패턴이지만 두 곳에서 제어 됨

를 좋아하지, 캠페인 을 위의 페이지가 유효 묶여 아닌지 확인 다른 개체 (캠페인)이 - 액티브 을 캠페인 - 캠페인 이상

상태를 제어하는 ​​2 개의 클래스가 있어야하는지 궁금합니다. 하나는 사용자 용이고 다른 하나는 캠페인 용입니다. 그런 다음 각 클래스에서 설정 한 두 상태를 기반으로 if 및 else를 기반으로 올바른보기를 추론합니다. 페이지를 좋아하고 캠페인 활성화하면

  1. - 쇼 사용자 캠페인 가능 페이지
  2. 페이지가 좋아 캠페인 활성화되지 않은 경우 - 쇼 prelike 캠페인 가능 페이지
  3. 페이지가 좋아 캠페인 인 경우 다음 - 쇼 사용자 캠페인 페이지
  4. 이상
  5. 페이지가 마음에 들지 않고 캠페인이 페이지 위에 넘겨주는 사용자 선호 캠페인을 표시하는 경우

    "코드 냄새"처럼 보입니까?

어떻게하면 좋을까요?

+0

캠페인 상태가 사용자에게 어떤 의미로 연결되어 있습니까? – CharlesB

+0

"컨트롤 상태"클래스가없고 캠페인 개체를 전달해야하는 이유는 무엇입니까? –

+0

캠페인 상태는 사용자와 연결되어 있지 않지만 사용자는 두 상태에 따라보기를 보게됩니다. 나는 설명에서 더 많은 정보를 추가했다. – Dhana

답변

0

두 상태 플래그를 모두 자신의 클래스로 래핑할지 여부는 저에게 중요하지 않습니다. 어떤 방법 으로든 의도를 명확하게 전달합니다 (예 : 플래그를 올바르게 지정). 귀하의 경우에는 아마도 간단한 규칙 기반 솔루션 (예 : @ejaenv에서 제공하는 것과 같은)으로 갈 것입니다. 아마도 작은 DSL 형태로 미화로 만들었을 것입니다.

그러나 IMO 이외에도 다른 유지 관리 기능을 사용할 수 있습니다. 두 가지 상태 (예 : 캠페인 및 캠페인) 간의 결합이 올바르게 정당화됩니까? 예를 들어, 때로는 모든 경우에 전용 된 예쁜 페이지를 준비하고 싶어한다는 것을 이해할 수 있습니다. 반면에 두 상태가 꽤 독립적 인 개념을 나타내므로 이러한 연결은 실제로 필요하지 않습니다. 아마도 단일 페이지 템플릿에는 각 플래그의 상태에 따라 적절한 요소가 포함될 수 있습니다. 그렇게하면 올바른 관점을 완전히 선택하는 문제를 피할 수 있습니다.

그러나 귀하의 제안은 실제로 질문을 제안 할 수있는 상태 패턴을 설명하지 않습니다. 이 패턴은 개체에 따라 다르며, 상태에 따라 호출마다 다양하며 다형성을 사용합니다. 조건을 추가 할 때 상태 패턴이 거의 도움이되지 않습니다. 이 패턴과 관련된 필요한 상용구 (boilerplate)의 양은 모든 경우 (이 경우 미성년자) 이익을 보완합니다. 그 외에도 상태 패턴은 클라이언트로부터 상태를 숨기는 것에 관한 것입니다 (관찰 된 동작을 간접적으로 기반으로 만 추론 할 수 있습니다). 그 패턴을 적용한 다음 그 상태를 읽으면 그것에 대한 결정을 내리는 데 확실히 코드 냄새가 날 것입니다.