2009-04-15 4 views
1

저는 비즈니스 규칙에 따라 여러 사이트에 대한 링크를 보여줄 수있는 컨트롤이 있습니다. 현재 링크 목록을 작성하는 모든 비즈니스 로직이 제어됩니다. 나는 busincess 로직을 컨트롤에서 옮길 계획이다.디자인 질문

무엇이 좋은 디자인이 될까요? 디자인 패턴을 사용할 수 있습니까?

답변

1

패턴에 대해 너무 많이 생각하면 안됩니다. 대부분 그들은 과잉 공격을 받고 너무 복잡합니다. 특히 이런 사소한 시나리오.

좋은 객체 지향 사례를 활용하면 괜찮을 것입니다. 비즈니스 로직을 다른 클래스로 캡슐화하고 액세스 할 수있는 공용 속성을 제공하십시오. 계속 간단하게!

+1

이 경우 패턴을 생각하면 실제로 더 간단한 해결책이 될 것이라고 생각합니다. –

0

나는 당신이 당신의 비즈니스 규칙을 구현하는 방법을 잘하지만, 여기에 생각하지 ...

나는 당신의 웹 양식 목록 컨트롤을 데이터 바인딩 것입니다.

public class YourLinks 
{ 

    // You could do it by overloading the constructor... 
    // Again not sure how you determine what links should be displayed... 
    // If you had consistent types you could make your constructor internal 
    // and then create a YourLinkBuilder see below... 
    public YourLinks(User user, Region region) 
    { 

    } 

    public YourLinks(City city) 
    { 

    } 

    // Databind to this method... 
    public IEnumerable<string> GetLinks() 
    { 
     // return your links... 
    } 

} 

public class YourLinkBuilder 
{ 
    public static YourLinks BuildPowerUserLinks() 
    { 
     return new YourLinks(new PowerUser(), new Region("Washington")); 
    } 

    public static YourLinks BuildVisitorLinks() 
    { 
     return new YourLinks(new VisitorUser(), new Region("Empty")); 
    } 
} 
0

제공되는 정보가 충분하지 않은 경우 링크 (및 관련 데이터) 모델을 만드는 것이 좋습니다. LinkModel을 렌더링을 위해 뷰에 전달할 수 있습니다. 또는 LinksModel을 기존 모델 (하위 모델)에 전달하십시오.

어느 쪽이든이 모든 데이터는 캡슐화됩니다. 따라서 나중에 데이터를 추가하려는 경우 메소드 서명 (또는 일반 계약)이 변경되지 않습니다. 데이터를 제거하려는 경우에도 동일한 이점이 있습니다. 완전히 제거하려는 경우 해당 객체는 하나 뿐이므로 제거가 간단합니다.

또한 링크보기 렌더러를 작성하여 LinksModel을 시각적으로 표시하는 방법 만 알 수 있습니다. 따라서보기 내에서 링크 정보의 시각적 요소를 기존 렌더 내에서 로직을 갖는 대신 이러한 렌더러에 위임 할 수 있습니다. 링크보기가 나중에 어떻게 보이는지 또는 사용자에게 다른 표현을 선택할 수있는 권한을 부여하려는 경우 'if'블록으로 전체 코드를 방해하지 않고 다른 렌더러를 사용할 수 있습니다.

Jeach!

0

모델 - 뷰 - 발표자을 사용해야합니다. 보기에는 제어가 있어야합니다.
컨트롤의 책임자 인은 단순히 사용자의 입력을 받아서 유효성을 검사하고 해당 정보를 발표자에게 전달해야합니다. 그러면 발표자는 비즈니스 규칙이 저장되는 모델과 상호 작용해야합니다.

모델에서 표시를 위해 컨트롤로 전달되는 링크를 반환하거나 다른 시스템으로 전달 된 일부 메타 데이터를 반환하여 링크를 검색하고자 할 수 있습니다.

내가 할 것은 모델의 패턴 패턴을 사용하면 다른 버전의 비즈니스 규칙을 쉽게 교환 할 수 있습니다.

백엔드 데이터 소스 (있는 경우)와 추상적 인 상호 작용을하려면 Martin Fowler의 게이트웨이 패턴을 살펴보십시오.

1

정말로 맞춤 컨트롤이 필요합니까?

Model-View-Controller은 컨트롤에 표시 논리 만있는 것이 좋습니다.

내장 된 컨트롤 (ListView)을 약간 변경하고 다른 곳으로 사용자 지정 데이터 집합을 만들어 전달할 수있는 솔루션을 찾으십시오.