2010-12-20 3 views
1

Caliburn.Micro를 배우기 시작했으며보기 모델 클래스의 예외/메시징 상자와 혼동하지 않습니다. Calibur.Micro의 Exception/MessageBox

나는 예를 들어,에 대한 몇 가지 블로그를 발견

http://frankmao.com/2010/11/18/handling-messagebox-in-caliburn-micro/

예를 들어 예외를 생성 할 수 있습니다 뷰 모델 클래스에 몇 가지 방법을.

public void MethodWichCanProduceEx(string arg1, string arg2) 
    { 
     if(arg1==null) 
      throw new ArgumentNullException("arg1 is null"); 
     if (arg2 == null) 
      throw new ArgumentNullException("arg2 is null"); 

     try 
     { 

     } 
     catch (Exception exception) 
     { 

      throw exception; 
      //? show message box MessageBox.Shox(exception.Message) 
     } 
    } 

올바른 취급 및 뷰에서 이러한 예외를 보여주는 무엇입니까? caliburn.micro에는 어떤 종류의 패턴이 있습니까?

.NET에서와 같이 텍스트, XML 파일에서 가능한 추적 예외가 있습니까?

예를 들어 XML, 텍스트 파일에서 추적 예외를 표시하고보기에서 message.box 또는 무언가 메시지 만 표시 할 수 있습니다.

미리 감사드립니다. 어쩌면 저의 질문은 바보입니다. 죄송합니다. 단지 calibur.micro 만 배우고 있습니다.

답변

3

메시지 상자의 경우보기 모델에서 추상화에 대해 항상 작업하려는 경우,보기 모델을 단위 테스트 할 때 사용자 입력을 기다리지 않아도됩니다.

내가 연결된 Frank Mao 코드는 대리자를 사용하여보기 모델에서 메시지 상자의 구현을 추상화하지만 여기서 인터페이스를 사용합니다. 대리자를 단일 메서드로 인터페이스로 생각할 수도 있지만이 컨텍스트에서 인터페이스를 사용하면 표시 할 메시지 유형에 따라 다른 메서드를 사용할 수 있다는 장점이 있습니다. 예를 들어, 당신은, 그래서 ShowMessageError, ShowMessageWarning, ShowMessageInfo 등

을 가질 수 귀하의 메시지 상자에 대한 계약을 정의

public interface IMessageBox 
{ 
    void ShowException(Exception exc); 
} 

는, 예를 들어보기 모델에 메시지 상자 의존성을 주입 그런 다음 당신은 윈도우 시스템 메시지 상자를 사용하거나, 원하는 어쨌든 메시지 상자를 구현, 또는 더 좋은 여전히 ​​아마도 Caliburn.Micro 창 관리자를 사용하여 메시지를 표시하기 위해 자신의 뷰/뷰 모델을 사용할 수 있습니다

public class MyViewModel 
{ 
    private readonly IMessageBox messageBox; 

    public MyViewModel(IMessageBox messageBox) 
    { 
    this.messageBox = messageBox; 
    } 

    public void MethodThatCanThrowException() 
    { 
    try {} 
    catch(Exception exc) 
    { 
     // log the exception here 
     ... 
     // show message box 
     this.messageBox.ShowException(exc); 
    } 
    } 
} 

생성자를 통해 .ShowDialog().

처럼 보일 수 있습니다 Windows 시스템 메시지 상자를 사용하여 구현 : 생산 코드에서

public class StandardMessageBox : IMessageBox 
{ 
    public void ShowException(Exception exception) 
    { 
    MessageBox.Show(exception.ToString(), "Error Occurred"); 
    } 
} 

, 당신은 당신의 IoC 컨테이너에서 IMessageBox 인터페이스에 대해 StandardMessageBox을 등록 할 수 있습니다.

단위 테스트 지역에서는 IMessageBox를 조롱하고 아무 것도하지 않거나 메시지 상자의 결과가있는 메서드의 경우 항상 원하는 값을 반환 할 수 있습니다.

예외를 로깅, 나는

+0

의 품질 및 긴 설명 주셔서 감사합니다 같은 log4net (http://logging.apache.org/log4net/index.html) 또는 NLog (http://nlog-project.org/)와 같은 로깅 프레임 워크에 보일 것이다. – Gunter