0

메소드의 실행 상태에 대한 상위 레이어 정보를 보내기 위해 상위 보더 비즈니스 레이어 메소드를 작성하는 방법에 대해 많은 질문을했습니다. 메시지 필드 (Is good to return a generic object with all important returning values from a facade signature?)를 포함하는 특수 클래스를 만들 것을 제안했으며 지금까지는 만족스러운 답변을 기대하고 있습니다. 그것은 항상, 반환 형식이 null 결코 :이 메커니즘은 레이어간에 전달되는 특정 메시지를 사용하는 데 유용 할 수 있습니다.

public List<ANiceType> AMethodDoingSomethingUsefulForTheBusiness(char anExampleParameter, int anotherExpampleParameter, out string operationResult)

이 서명은 다음과 같이 사용한다 : 그래서, (C#으로)이 작업을 수행하는 방법에 대한 내 마지막 아이디어는이 같은 서명을 사용하는 것입니다 요소가 있거나없는 목록; operationResult에는이 값을 생성하는 메소드 내에서 일어난 일을 설명하는 문자열이 들어 있습니다. 예를 들면 다음과 같습니다 List이 비어있는 경우, operationResult내가 할 것을

공지 사항 ... "x와 y 등 비즈니스 규칙이 깨진 된 ANiceType을 가지고 있지 ZZ 특성에 의해 식별되는 사람이 있습니다"같은 것을 포함 할 수 있습니다 예외 처리을 사용하여 오류 메시지와 모든 계층의 모든 논리, 특히 상위 계층의 논리를 관리하려고하지 마십시오.

그래서 :

  1. 가 좋은 방법인가? 왜?
  2. 그렇지 않은 경우이 문제에 대한 제안 사항이 있으십니까?
  3. 이 문제를 해결하기 위해 패턴을 알고 있거나 사용 했습니까?

감사합니다.

+2

될지 또는되지 않을지. 그 질문은 뭐니? –

+0

@ Moo-Juice 질문이 유효하지 않다고 생각하면 질문에 플래그를 지정할 수 있습니다. – JPCF

+0

* 왜 * 오류를보고하기 위해 예외를 사용하지 않습니까? 그것이 바로 그들이 원하는 것입니다. – svick

답변

2

각 개체를 알지 못하는 개체 (기본 매개 변수 또는 인프라 어셈블리에있는 복잡한 개체)가없는 레이어간에 메시지를 전달하려면 약한 이벤트 패턴을 참조해야합니다.

그것은 매우 WPF/MVVM에 사용되는 프리즘과 같이가는 것 (당신에게 예를 얻을 수) :

public class UserNameChangedEvent : CompositePresentationEvent<string> 
{ 
} 

를 게시 : 위성 어셈블리에서

private string m_UserFullName; 
    public string UserFullName 
    { 
     get 
     { 
      return m_UserFullName; 
     } 
     set 
     { 
      if (m_UserFullName != value) 
      { 
       m_UserFullName = value; 
       m_EventAggregator.GetEvent<UserNameChangedEvent>().Publish(value); 
      } 
     } 
    } 

EventAggregator은 이러한 "메시지"를 처리 할 책임이 있으며, 프리즘은 구현되어 있으며 IoC/DI를 사용하여 액세스 할 수 있습니다.

그런 다음 당신은 그것을 듣고 여기서 길을 따라, 심지어는 패턴과 무관 때문에 그건, 클래스의 이름을 지정하지 않았다

m_EventAggregator.GetEvent<UserNameChangedEvent>().Subscribe(UpdateTitle, ThreadOption.UIThread); 

private void UpdateTitle(string title) 
{ 
    this.Title = "MyApp - " + title; 
} 

알 수 있습니다.

그저 예일 뿐이므로 웹 전체에서 비 프리즘 응용 프로그램 구현을 찾을 수 있습니다.

관련 문제