클린 아키텍처의 Presenter를 이해하기 어려운 것은 MVC 2가 아니기 때문에

깨끗한 아키텍처의 신비



클린 아키텍처에는 구체적인 클래스 구성 예를 보여주는 다음 그림이 있습니다.



이 그림 중에서 Presenter와 Output Boundary(Presenter의 인터페이스)만 구체 구현을 이미지하는 것이 매우 어렵다고 생각합니다.

"실천 클린 아키텍처"이라는 블로그 기사에서는 Presenter에 대해

이것에 감히 만지지 않은 이유는 MVC 프레임워크와의 궁합이 나쁘기 때문입니다.

라고 쓰고 나서, MVC 프레임워크와의 공존 방법에 접하고 있습니다.

따라서 MVC 프레임 워크에서 Presenter 및 Output Boundary를 다루기가 어려운 이유를 설명합니다.

결론



웹의 MVC 프레임워크에서 위 그림과 같이 구현할 수 없는 이유는 웹의 MVC 프레임워크가 MVC 2를 기반으로 하는 반면, 클린 아키텍처의 다이어그램은 구형 MVC(이후 MVC 1)를 기반으로 하기 때문입니다.

웹 프레임워크의 경우 예를 들면 다음과 같다.



원래 MVC는 2 종류 있다



MVC라는 단어를 제대로 조사하면 처음에는 매우 혼란스러워집니다.

예를 들어 Wikipedia의 Model View Controller 페이지에는 다음 그림과 설명이 적혀 있습니다.


데이터의 변경을 뷰에 통지하는 것도 모델의 책임이다 (모델의 변경을 통지하기 위해 Observer 패턴이 이용되는 경우도 있다)

그러나 웹 개발에 익숙한 MVC에서는 Model 변경 사항을 View에 알리는 작업이 없습니다.

사실, Wikipedia로 작성된 MVC는 이전 GUI 용 MVC 1이며 웹 프레임 워크에서 사용되는 것은 웹 용 MVC 2입니다.

MVC 1은 Model에서 View로 변경 사항을 알립니다. Web로 실현하려고 하면 WebSocket 등을 사용하게 됩니다.
MVC 2에서 Controller는 Model 변경 사항을 View에 반영합니다. 웹의 MVC 프레임워크에서 Controller의 끝에서 View로 전달됩니다.

MVC 1 및 MVC 2에 대한 자세한 설명은 다음 문서를 참조하십시오.
  • MVC와 MVC2에 대해 다시 생각해보십시오.
  • MVC를 웹에 적용한 "MVC2"
  • MVC 패턴 재고

  • 클린 아키텍처의 클래스 다이어그램은 MVC 1



    클린 아키텍처의 클래스 구성 예의 다이어그램을 다시 보면 ...



    Controller에서 Presenter 또는 View에 종속 선이 그려지지 않았습니다.
    이는 이 그림이 MVC 2가 아닌 MVC 1을 기반으로 함을 의미합니다.

    MVC 1을 사용하면 능숙한 구성을 실현할 수 있으며, 그 때 애플리케이션 계층이 프레젠테이션 계층에 의존하지 않도록 Output Boundary라는 인터페이스에서 DIP를 적용하게 됩니다.

    웹의 MVC와 깨끗한 아키텍처의 떨어짐



    반면에 Web Framework와 같은 MVC 2를 사용하는 경우 Controller는 Output Data를 받고 View Model으로 변환하여 View로 전달하는 흐름입니다.
    이 때 Output Data를 View Model으로 변환하는 역할을 Presenter에 맡길 수 있습니다.
    이것들을 정리하면 아래 그림과 같이 됩니다.



    Presenter의 인터페이스 인 Output Boundary는 DIP가 더 이상 필요하지 않으므로 삭제되었습니다.

    참고


  • Clean Architecture 전문가에게 배우는 소프트웨어의 구조와 설계
  • 구현 클린 아키텍처
  • 좋은 웹페이지 즐겨찾기