아키텍처 디자인 패턴은 시간이 지남에 따라 MVC (Model-View-Controller)에서 MVP (Model-View-Presenter)를 거쳐 MVVM (Model-View-ViewModel)으로 발전해 왔습니다.
MVC 패턴에서는 '모델(Model)'이 존재하며, 이 모델을 '뷰(View)'에서 참조합니다. 여기서 모델은 엔티티(entity)로 생각할 수 있습니다. 이 패턴에서는 모델의 변경이 뷰에 바로 반영되어야 하기 때문에, 모델에 변경이 있을 경우 해당 모델을 참조하는 뷰의 모든 부분을 수동으로 업데이트해야 하는 불편함이 있습니다.
이러한 불편함을 해결하기 위해 MVVM 패턴이 등장했습니다. MVVM은 데이터와 관련된 모델과 뷰에서 사용되는 모델을 분리합니다. MVC에서는 모델이 갱신될 때 컨트롤러(Controller)가 뷰에 직접 갱신을 명령하지만, MVVM에서는 모델이 변경되더라도 별도의 명령 없이 자동으로 뷰가 갱신됩니다.
Controller는 뷰로부터의 요청을 받아 해당 요청을 적절한 서비스로 연결하는 라우트(route)의 역할을 담당합니다.
Service는 비즈니스 로직을 담당합니다. 예를 들어, 고객이 마트에서 물건을 주문하고 배달받는 과정에서 고객은 물품이 어떤 과정을 거쳐 자신의 집에 도착하는지 알 필요가 없습니다. 고객의 요청에 대한 결과를 도출하는 전반적인 과정을 서비스가 처리합니다.
Repository는 비즈니스 로직을 통해 도출된 데이터를 관리하는 역할을 합니다.
Flutter에서는 다음과 같이 각 구성요소를 구현할 수 있습니다:
이러한 구조는 개발의 효율성을 높이고, 유지보수를 쉽게 만들어 줍니다.