MVVM아키텍처를 적용하게 되면 아래와 같은 폴더구조가 된다 아래 폴더 구조를 기본으로 추가적인 화면이나 도메인이 추가될때 마다 확장해나가면 될것이다. /data /model - post.dart /repository - post_repository.dart /datasource - local_datasource.dart - remote_datasource.dart /ui /post - post_list_view.dart - post_list_viewmodel.dart - post_detail_view.dart - post_detail_viewmodel.dart - post_pages.dart /ui View와 ViewModel에 해당하는 파일들이 있으며, 하나의 주제 혹은 도메인 단위로 폴더를 생성한다..
Data Layer App전체에 필요한 데이터를 제공하는 곳으로, Repository 패턴으로 구성되어 있다. 보통 ViewModel이 Repository에 필요한 정보를 요청하게 되고, RemoteDataSource, LocalDataSource를 통해 외부혹은 내부스토리지의 데이터를 가져오거나 갱신한다. Repository 데이터 저장소라는 의미의 Repository는 실제 ViewModel에서 Data Layer에 접근하는 객체이다. 보통은 특정 도메인 별로 Repository를 만들게 되는데 예를 들면 UserRepository, PostRepository와 같은 형태로 구분해서 만든다. 위 에서 확인 할 수 있듯이 ViewModel은 여러 Repository를 참조할 수 있으며, 각 Reposi..
View View는 유저에게 UI를 보여주는 곳으로, View 클래스 하나로 이루어져 있다. Flutter에서는 선언형 UI를 사용한다. 그래서 모든 View의 구성요소들은 Widget이 되고, 이것들의 위젯트리를 만들어 화면을 표시하게 된다. 기반이 되는 대표 Widget으로 StatefulWidget과 StatelessWidget이 있다. StatefulWidget은 자체적으로 state를 유지하고 관리하기 때문에 커스텀 위젯을 만드는데 주로 사용하는 편이다. 우리처럼 ViewModel에서 state를 관리할 경우에는 StatelessWidget으로 View를 만드는 것이 개념적으로 바람직 하다. PostListView (post/post_list_view.dart) 게시물 목록을 표시하는 View ..
모바일 앱 개발을 하게 되면 기본적으로 필요한 구조와 기능이 있다. Android, iOS앱 할것 없이 결국 앱이 구현해야 하는 최종 기능은 같다. Flutter로 앱을 만들때도 마찬가지다. 앱을 개발한다면 앱의 확장성과 유지보수의 편의성을 고려해서 꼭 아키텍처를 적용하는 것이 필요하다. 개인적으로 모바일 앱에 가장 적합한 아키텍처는 MVVM이라고 생각한다. Flutter로 앱을 개발할때 Andorid 앱 개발에 사용하던 MVVM 아키텍처를 어떻게 하면 Flutter 특성에 맞게 잘 적용 시킬 수 있을지 많은 고민을 했었다. Android개발자중 MVVM이 AAC (Android Architecture Component)로만 사용할수 있는 기능처럼 생각하는 사람들도 있는데 MVVM은 AAC가 없이도 개발..
m1에서 python의 특정 라이브러리를 설치하려할때 기존 x86_64와 충돌로 정상적으로 설치가 되지 않는 경우가 있다. 특히 firebase-admin 라이브러리를 설치할때 의존라이브러리인 grpcio설치가 정상적으로 되지 않아 문제가 발생한다. $ python3 -m venv venv $ source venv/bin/activate $ (venv) pip3 install grpcio .... distutils.errors.CompileError: command '/usr/bin/clang' failed with exit code 1위와 같이 grpcio라이브러리만 따로 설치하려 할때 오류가 발생한다. 이를 해결하기 위해서 다음 과정을 따른다. arm64용 homebrew설치 02 ar..
개발자로 여러 프로젝트를 경험하다 보면 가장 어렵고 힘든 일은 망가진 프로젝트를 다시 리팩토링하는 경우다. 이런 망가진 프로젝트들은 다음과 같은 특징을 가진다. 1. 문서가 없다. 가장 기본이 되는 문서들조차 없는 경우가 많다. - 사양(정책)정의서 - 화면정의서 - API 정의서 위에 언급한 3가지 문서는 모바일 개발을 위해서 가장 필수가 되는 문서들이다. 이 문서들이 없이는 개발을 진행할 수 없다. 이것 없이 개발한다 하더라도 언젠가는 결국 만들어야 한다. 그런데 망가진 프로젝트들은 보통 이런 기본적인 문서가 존재하지 않는다. 개발을 처음 시작할 때부터 그냥 말로 전달하는 내용을 개발자가 임의로 만들었을 가능성이 가장 높다. 이런 프로젝트를 리팩토링해야 하는 경우가 되면 우선 이 문서들을 다시 만드는..
질문 Flutter에서 화면간 정보전달은 어떻게 해야 하나요? 예를 들어 현재 화면이 목록화면이고 여기서 게시물 등록 화면으로 이동한 후 정상적으로 게시물이 추가된 경우에는 목록을 갱신하고, 그냥 백 버튼을 누르거나 취소를 한 경우에는 이전 목록화면을 그대로 유지하고 싶습니다. 어떻게 해야 할까요? 답변 Navigator에 새로운 화면을 표시하기 위해서 MeterialPageRoute와 같은 Route에 Widget을 설정한 후 navigator에 push합니다. (또는 /post/add와같이 이름을 지정해서 이동할수 있습니다) 이럴경우 navigator의 이전에 남아 있던 page는 statck에 그대로 남아 있게 되는데, 현재 page를 navigator에서 pop을 하고 나면 statck에 있던..
이제 백엔드 시스템에서 비동기처리는 대세가 되었다. python진영 백엔드는 오래전 부터 Django와 Flask가 다수를 차지 하고 있었지만, 처리속도에 장점이 있는 비동기서버에 대한 관심과 요구가 커지면서 지금은 Sanic이나 FastAPI와 같은 백엔드프레임워크를 사용하는 곳이 늘어 나고 있다. 이번에 개인적으로 웹소켓을 이용해서 간단한 채팅서비스를 만들어 보고자 기술검토를 하던 중 백엔드 시스템을 Node.js를 사용할까 하다 javascript보다는 python이 좀더 익숙하고 사용하기 편하기에 Node.js의 성능에 버금가는 비동기 처리 프레임워크인 FastAPI에 대해서 알아 보기로 하였다. 이미 Flask로 여러 프로젝를 진행한 경험이 있기때문에 Flask와 구문이나 사용성 면에서 유사하고..
- Total
- Today
- Yesterday
- flutter mvvm
- LocalKey
- flutter i18n
- FlutterEngine
- Mutiple Flutter
- flutter l10n
- StatefulWidget LifeCycle
- Element LifeCycle
- MVVM
- dart 2.17
- DART
- Widget Tree
- Android
- freezed
- Flutter TDD
- flutter_secure_storage
- flutter2.0
- Route
- Flutter
- RenderObject
- python3
- json_serializable
- Flutter LifeCycle
- navigator
- widget element
- enum member
- dart enum
- flutter element
- flutter 다국어처리
- Flutter3.0
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |