programming코딩

리얼 Flutter #6 App 만들기 – Data Repository

오늘은 Data Model과 Repository 에 대해서 설명합니다.

설명과 함께 구현하는 코드는 github repository에 있고 본 글은 commit 0126e41기준입니다.

먼저 지금 만들고 있는 Idea Note의 Class Diagram을 그려봤습니다.

앞서 Chapter #5 BLOC에서 설명했던 아래 구조대로 BLOC와 Data로 구분되어 있음을 알 수 있습니다.

위 Class Diagram에는 UI는 없지만 UI가 IdeaBloc와 Interfacing을 함으로써 추가될 거라는 것을 알 수 있습니다.

data is Repository

Data Model

이 부분은 간단합니다.

Idea는 unique한 id가 있고 title, role, goal, value 그리고 created된 시간을 갖습니다.

Repository

우선 여기서 사용하는 SharedPreference는 library를 import한것입니다.

pubspec.yaml에 다음을 먼저 추가해주세요.

shared_preferences: ^0.5.12+4

코드 설명 들어갑니다.

  1. ideas을 갖도록 합니다.
  2. CURD를 할 수 있는 Interface들입니다. getList는 ideas가 Map이라서 value의 iterator 형태가 필요할 경우를 위해서 만들었습니다.
  3. fetch, save는 물리적 저장소에 저장하는 Interface입니다.
  4. 일단 지금은 단말내에만 data를 저장하도록 Android의 SharedPreference를 사용합니다. 여기만 rest api등으로 바꾸면 server의 database으로 변경할 수 있겠죠? 또는 여기를 Proxy패턴을 사용하도록 하면 Network 연결 여부에 따라 서버와 단말에 저장 영역을 달리 할 수 있습니다.
  5. Platform이나 Network과 같이 다른 Component와 통신함으로써 async한 상황이 생기는 경우 Future를 사용해야 합니다.

BLOC

다시 Bloc로 돌아가 mapEventToState 를 확인해보겠습니다.

  1. IdeaEventFetching Event인 경우 repository로부터 물리적 저장소로부터 data를 fetching하도록 합니다. 그리고 state를 IdeaStateFetched로 정해줍니다.
  2. Event가 IdeaEventSaving일 경우를 처리하죠.
  3. Event가 IdeaEventDeleting일 경우를 처리합니다.

쉽죠?

마치며

각 객체는 최대한 자신의 역할에 집중할 수 있어야 합니다.

IdeaRepository는 Data Model을 handling하고 data를 UI에 Providing하는 역할을 합니다.

그 역할에 집중할 수 있도록 설계하여 구현해봤습니다.

다음은 이 Repository로부터 data를 제공받아 UI로 표현해주는 것을 설명합니다.

제가 UI부터 설명하지 않고 Business Logic Component와 Data Repository부터 설명하는 이유는 UI는 언제든지 User의 요구에 따라 변경할 수 있어야 하고 이를 위해서는 Business Logic Component와 Data Repository가 엄격히 분리되어 있어야 하고 구조가 잘 잡혀 있어야지 가능한 일이기 때문입니다.

Leave a Reply