인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

이동현님의 프로필 이미지
이동현

작성한 질문수

Flutter 중급 1편 - 클린 아키텍처

33 노트 삭제, 취소 기능

widget build private 함수 멀티 호출

작성

·

253

0

안녕하세요. 강의코드중 궁금한게 몇가지 있어서 질문드립니다. 

1. add_edit_note_screen.dart 파일에서

param 값인 selected와 color를 콘솔에 찍어보면

한번 클릭시 여러번의 로그가 쌓이는데요.. 

색상 변경시 _buildBadkgroundColor() 함수가 여러번 호출이 되어서 그런건지 color의 갯수만큼 로그가 찍히는데요..정상인건가요? 

 

 

2. 다른 강의에서도 설명해주신 내용으로 자체 개발을 진행해보고 있는데요.. di/ provider_setup.dart 파일을 구성할때

가령 msa 구조로 product, order 이렇게 모듈로 나누어져 있고 product 모듈에서 쓰는 여러 api 및 use_case, order에서 쓰는 여러 api 및 use_case가 있을텐데요..

이렇게 앱이 규모가 커졌을때 provider_setup 파일에 각 모듈에 해당하는 productAPI 및 use_case를 다 정의해줘야 하는지 아니면 다른 방법이 있는지 궁금합니다.

 

ProxyProvider<http.Client, PixabayApi>(
update: (context, client, _) => PixabayApi(client),
),
ProxyProvider<PixabayApi, PhotoApiRepository>(
update: (context, api, _) => PhotoApiRepositoryImpl(api),
),
ProxyProvider<PhotoApiRepository, GetPhotosUseCase>(
update: (context, repository, _) => GetPhotosUseCase(repository),
),

 

이전에 이렇게 pixabayapi 및 use_case가 1개라 위와 같이 선언이 되었는데요..

pixabayapi 외에도 또 다른 productapi, orderapi 가 존재하는 경우, 그리고 각 product 모듈내에 GetPhotoUseCase 처럼 하나가 아닌 여러 useCase가 존재할때 같은 방식으로 각 useCase별로 여러번 위와 같이 선언을 해야 하나요? 

 

ProxyProvider<http.Client, PixabayApi>(
update: (context, client, _) => PixabayApi(client),
),
ProxyProvider<PhotoApiRepository, GetPhotosUseCase>(
update: (context, repository, _) => GetPhotosUseCase(repository),
),

//product API
ProxyProvider<http.Client, ProductApi>(
update: (context, client, _) => ProductApi(client),
),

 

//여러개 use case일때??????

ProxyProvider<ProductApiRepository, GetProductUseCase>(
update: (context, repository, _) => GetProductUseCase(repository),
),
 
ProxyProvider<ProductApiRepository, GetProductDetailUseCase>(
update: (context, repository, _) => GetProductDetailUseCase(repository),
),

ProxyProvider<ProductApiRepository, UpdateProductDetailUseCase>(
update: (context, repository, _) => UpdateProductDetailUseCase(repository),
),


.... usecase별로 다 생성이 필요한거죠???

 

 

답변 1

0

오준석님의 프로필 이미지
오준석
지식공유자

1. noteColors를 map 함수로 변환하고 있으니 색상 갯수만큼 실행되는 것이 맞습니다. 로그를 잘 보시면 색상도 모두 다르고 상태도 한 개만 true 이지요.

2. 네. 잘 하고 계십니다.

추가로 부연 설명을 추가하자면

Provider로 설정을 하는 이유가 다른 곳에서도 쉽게 해당 객체 인스턴스를 얻고자 하기 위함입니다.

모든 객체를 싱글턴으로 취급하겠다면 위와 같이 모든 객체를 Provider로 설정해도 되고, 상황에 따라서는 다른 방식도 응용할 수 있습니다.

어떤 ViewModel은 싱글턴이면 안 되는 상황도 있습니다. 예를 들어 리스트에서 클릭시 상세 페이지로 들어가는 부분은 상세 페이지로 들어갈 때 Provider 가 작성되어서 매번 ViewModel을 다시 생성해야 합니다. 이 때는 navigator.push 하는 순간에 Provider 코드가 들어가지요.

그래서 의존성 주입 부분은 여러가지 옵션이 있을 수 있겠습니다.

따라서 프로젝트가 복잡해 지게 되면get_It 패키지 도입도 고려해 볼 만 합니다. 싱글턴과 매번 생성되는 인스턴스 설정을 관리하기가 좀 더 쉬워집니다.

https://www.youtube.com/watch?v=f9XQD5mf6FY

이동현님의 프로필 이미지
이동현
질문자

항상 친절하고 자세한 답변 감사드립니다.

이동현님의 프로필 이미지
이동현

작성한 질문수

질문하기