문제

내 질문이 추상적으로 보일지 모르지만 나는 그것이 아니기를 바랍니다. 응용 프로그램, ASP.NET MVC 사이트를 개발 한 후 나중에이 응용 프로그램을 위해 WinForms 클라이언트를 구축해야한다고 가정 해 봅시다. 기존 응용 프로그램에서 얼마나 많은 시간과 어떻게 재사용 할 수 있습니까?

모델을 정의하고 컨트롤러와 뷰를 정의했습니다. 그들은 모두 잘 작동합니다.

이제 Boss는 Winforms 클라이언트를 요청하고 모델과 컨트롤러를 재사용 할 수 있기를 바라고 있습니다 (다른 어셈블리에 넣은 경우).

이 작업을 수행 할 수 있습니까? 어떻게?

도움이 되었습니까?

해결책

ASP.NET MVC가 아니라 순수한 ASP.NET 웹 양식으로 이전에 작업을 수행했습니다. 나는 집에서 재배 한 MVP (Model-View-Presenter) 패턴을 사용했으며, 윈 포름 앱에서 발표자 (== 컨트롤러)를 사용할 수 있도록하는 가장 중요한 것은 참조하지 않는 것이 었습니다. 아무것 System.web와 관련이 있습니다

따라서 가장 먼저해야 할 일은 요청, 응답, 웹 등을 감싸기 위해 인터페이스를 소개하고 모든 발표자가 종속성 주입을 통해 이러한 인터페이스를 수락하도록하는 것입니다 (또는 다른 기술로 발표자가 제공 할 수 있도록). 발표자가 실제 시스템이 아닌이를 사용하는 경우.

예시:

컨트롤을 페이지 A에서 B 페이지로 전송한다고 상상해보십시오 (WinForms 앱에서 양식 A와 개방형 양식 B를 닫을 수 있음).

상호 작용:

public interface IRuntimeContext
{
  void TransferTo(string destination);
}

웹 구현 :

public class AspNetRuntimeContext
{
  public void TransferTo(string destination)
  {
    Response.Redirect(destination);
  }
}

Winforms 구현 :

public class WinformsRuntimeContext
{
  public void TransferTo(string destination)
  {
    var r = GetFormByName(destination);
    r.Show();
  }
}

이제 발표자 (귀하의 경우 컨트롤러) :

public class SomePresenter
{
  private readonly runtimeContext;
  public SomePresenter(IRuntimeContext runtimeContext)
  {
    this.runtimeContext = runtimeContext;
  }

  public void SomeAction()
  {
    // do some work

    // then transfer control to another page/form
    runtimeContext.TransferTo("somewhereElse");
  }
}

ASP.NET MVC 구현을 자세히 보지 못했지만 이것이 시나리오를 활성화하기 위해 많은 작업이 될 것이라는 증거를 제공하기를 바랍니다.

대신 다른 플랫폼의 뷰 및 컨트롤러를 다시 코딩해야한다는 것을 고려하고 대신 컨트롤러를 극도로 얇게 유지하고 공유 할 수있는 서비스 계층에 코드의 대부분을 넣는 데 집중할 수 있습니다.

행운을 빕니다!

다른 팁

살펴보십시오 노스 윈드 스타터 키트 (Northwind 비트로 꺼지지 마십시오)- MVC 및 Winforms를 포함한 레이어드 아키텍처에 다양한 GUI가 부착되어 있습니다.

그것은 당신이 달성하고자하는 것을 정확하게 수행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top