inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 응용 - 공공 API를 활용한 앱 만들기 (MVVM 패턴)

기존 코드 mvvm으로 역할 분리하는 기준이 궁금합니다

해결된 질문

221

민태호

작성한 질문수 2

0

강의를 통해 학습에 정말 많은 도움을 받고 있습니다. 감사합니다.

 

처음부터 구조를 잘 잡아서 설계하면 좋겠지만, 역할이 제대로 명시되지 않은 함수들을 각각 repository, service, viewmodel로 역할을 명시해주는 것도 난이도가 있으면서 함수들의 역할을 더 명확히 파악하는 데 도움이 될 것 같아서 파일 하나에 함수를 몰아 놓고 분리해보고 있습니다.

혹시 repository, service, viewmodel로 함수를 분리해서 작성할 때, 명확한 기준이 존재할까요??

제가 학습한 바로는 repository는 데이터베이스/서버 통신 또는 데이터 불러오기 관련, service는 repository를 활용한 비즈니스 로직, Viewmodel은 service를 활용한 View와의 상호작용이라고 알고 있습니다.


제가 아직 비즈니스 로직을 명확하게 구분하기기 어렵습니다..

에를 들면 파일 탐색기 실행 > 파일 경로 받기 > 파일 디코딩 > JSON(map)형식 변환 > 데이터 필터링 의 과정이 있다고 가정하면, 여기서 어디까지의 함수를 어디로 분리할 지 감이 오지 않습니다.
명확하게 구분할 수 있는 기준이나 팁이 존재한다면 알고 싶습니다!

flutter mvvm repository service viewmodel

답변 2

1

오준석

인공지능 답변에 이어 제가 답변 드리겠습니다.

이 부분이 쉽지 않은 영역인데요.

파일 디코딩 -> JSON 변환은 순수하게 데이터를 처리하는 부분이고 Service 또는 DataSource 로 부를 수 있겠습니다.

비즈니스 로직은 여기에 앱에 필요한 로직이 가미되면 그것이 비즈니스 로직입니다.

비즈니스 로직은 두 군에서 작성할 수 있겠습니다.

View에 대한 비즈니스 로직은 ViewModel 에 함수에서 작성합니다.

그 외에 데이터의 복잡한 처리가 비즈니스 로직이라고 보면 될 것 같습니다.

결론적으로 "앱에 필요한 로직이 가미되면 그것이 비즈니스 로직"이다. 라고 보시면 어떨까요?

1

민태호

"앱에 필요한 로직"이라는 키워드가 정말 좋은 것 같습니다.

참고해서 공부해보겠습니다 감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 민태호님.

먼저, 질문해주신 내용에서 적절한 답변을 찾기 위해 먼저 비슷한 주제를 다루는 게시물을 추천 드리겠습니다:

  1. 폴더 구조화 질문 : 이 게시물에서는 기능별로 어떻게 아키텍처를 구성할지에 대해서 설명하고 있습니다. 특히, 앱의 규모가 커질 때 폴더 구조를 클린 아키텍처에 맞게 어떻게 구성할지에 대한 예시를 제공합니다. 이미지 URL도 포함되어 있어, 실제 구현에 도움이 될 수 있습니다.

  2. 클린 아키텍처에 대해 : 클린 아키텍처 내에서 Use Case와 MVC 패턴의 서비스 간의 차이점을 설명하고 다중 모델을 어떻게 관리할지에 대한 고민을 다룬 게시물입니다. 클린 아키텍처의 필요성에 대해 고민하시는 데에 도움이 될 수 있습니다.

  3. 클린 아키텍처, MVVM 여러 질문 : MVVM과 클린 아키텍처에서 각 컴포넌트의 역할에 대한 자세한 설명이 담겨 있습니다. 로그인 정보 관리 및 UseCase와 ViewModel 구분에 대한 사용자님의 고민을 자세히 다룹니다.

Flutter에서 MVVM 패턴을 사용하는 주요 장점은 코드의 역할을 명확히 분리하여 유지보수가 쉽고 테스트가 용이하다는 점입니다.

  • Repository는 데이터를 가져오고 저장하는 역할을 하며, 데이터베이스나 웹 서버와의 직접적인 상호작용을 담당합니다.
  • Service는 비즈니스 로직을 포함하여, Repository를 활용해 좀 더 고수준의 데이터를 가공하거나 처리하는데 사용됩니다.
  • ViewModel은 UI와 상호작용하며, View에 필요한 데이터를 Service를 통해 조작하고 전달하는 역할을 합니다.

질문에서 예로 드신 파일 처리 시스템을 보자면 각각은 다음과 같이 배치할 수 있습니다:
- Repository: 파일 경로를 통해 파일을 읽어오는 역할
- Service: 파일을 디코딩하고 JSON 형식으로 변환하는 과정
- ViewModel: 변환된 데이터를 필터링하고 UI에 전달

비즈니스 로직의 구분은, 어떤 로직이 UI 변화에 직접 영향을 주는지 또는 데이터를 가공하는 과정인지에 따라 결정될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Node 관련 질문입니다

0

21

3

구글 소셜 로그인 후 로그인 시 구글에러

0

25

2

실습중(개인 비용 관리 앱) 문의드려요

0

42

2

6강에 비디오가 이상해요

0

21

1

Isar 마지막 업데이트는 2년전입니다.

0

29

0

수강연장부탁드려도될까요..

0

40

2

Chat GPT API 설정하기 프롬프트

0

45

2

FlutterSecureStorage 질문

0

27

0

구글 플레이 등록 시, Privact Policy URL 등록 팁

0

40

1

질문있습니다!

0

17

0

2-8강 Websocket server running on port가 안 뜹니다.

0

40

2

video_call 플러그인 설치후 에러 발생

0

42

1

회차마다 있는 실습

1

38

2

계정 관련 문의

0

47

2

Repository 작성 이후 비교하는 샘플소스가 없나요?

0

151

2

섹션1은 눈으로만 보면된다 하셨는데 섹션2만 봐도 되나요?

0

112

1

provider를 사용하시는 이유가 있을까요?

0

240

1

이제 버전 3.4인데 쭉 들어도되겠죠?...

0

253

2

http 쓸때 버전 변경에따른 이슈

2

312

1

폴더 구조화 질문

0

342

1

json 데이터

0

321

1

3버전 flutter에서 final stores = List<Store>(); 이 부분이 에러가 날 때는

0

345

1

3버전 flutter에서 RaisedButton이 안보일 때는ElevatedButton을 써보세요

0

375

1

Funtion vs StatelessWidget 질문!!!

0

667

1