Jaebi의 Binary는 호남선

Flutter - Clean Architecture 본문

Flutter

Flutter - Clean Architecture

jaebijae 2024. 6. 1. 18:46

목차

    Clean Architecture & Flutter

    • 코드를 각각 독립적인 레이어로 분리

    • 총 3개의 Layer: Presentation, Domain, Data

    Presentation

    • Widgets 
      • UI - 스크린 Views로 보여지는 모든 위젯들
    • Presentation Logic Holders 
      • 위 위젯에서 Dispatch되는 이벤트
      • State Management
        • BLoC
        • GetX
        • etc.
      • Presentation Logic Holder 자체적으로는 많은 작업을 하지 않음, 모든 작업들은 Use Cases로 보냄
      • Presentation Layer는 기본적인 Input conversion, validation등을 관리

    Domain

     

    • 비지니스 로직(Use Cases)과 비지니스 Object(Entities)를 관리
    • Presentation Layer의 BLoC과 같은 Logic Holders에서 비지니스 로직을 추출하여 BLoC Class는 Views와 Use Cases 간에 통로 역할만 하게 함
    • Use Cases 
      • 앱에서 사용되는 모든 비지니스 로직을 Encapsulate하는 클래스들
      • Ex) getMonitoringData, getUserInfo, getRandomData
    • Data Layer에 있는 Repository를 데이터를 가져오는데, 독립성 유지? 
      • Repository는 Domain과 Data 레이어 둘다 동시에 들어감
      • Dependency Inversion 
        • Domain layer에서 추상화된 Repository 클래스를 만들어 Repository가 어떤 일을 하는지 정의함
        • Repository의 실제 구현은 Data layer에 들어가며 Domain layer에 정의된 부분을 의존함
        • 고수준(high level)과 저수준(low level)
    저수준 클래스는 고수준 클래스의 작업을 돕는 작은 클래스라고 할 수 있습니다. 보통은 파일 입출력, 데이터베이스 통신 같은 기술적인 부분을 다루는 저수준 클래스를 먼저 작성하고, 이런 저수준 클래스들을 사용해 현실 세계에서 유용한 비즈니스적인 부분을 다루는 고수준 클래스를 작성합니다. 고수준 클래스가 저수준 클래스를 사용하므로 고수준 클래스가 저수준 클래스에 의존하는 것이 자연스러워 보이지만, 저수준 클래스는 빈번하게 변경되고 추가될 때마다 고수준 클래스가 영향을 받기 쉬우므로 의존관계를 역전시켜야 합니다.

    Data

    • 캐시(데이터 베이스, 보안 저장소, 내부 저장소), 원격(API 서비스), 또는 어플리케이션에 필요할 수 있는 데이터 소스와 같이 상호 하는부분에 필요한 Logic들 포함
    • Repository Implementation
      • Domain layer에서 정의된 Repository의 대한 실제 구현
      • Repository단에서 cached data를 불러올지, remote data를 불러올지 정의
    • Data Source 
      • Remote (API) & Local (cache) 데이터 콜
      • Models를 리턴함 (Entities X)
        • Raw data를 Dart object로 변환 하기 위하여 JSON 변환 코드가 필요함
        • Domain Entities에 JSON관련 코드가 들어가버리면 받아오는 Data Type이 달라질 경우 문제 발생
      • Entities를 상속받는 Model 클래스를 생성하여 Raw Data변환 코드(ex. toJson, fromJson)나 추가적인 fields (ex. database ID)를 넣어줌
    • 예시) 
      • Remote Data Sources - HTTP GET request
      • Local Data Sources - Shared Preferences
      • Repository Implementation에 위 Data Sources가 들어감
    • Cache 
      • Cache를 함으로서 사용자가 Offline일때도 데이터를 볼 수 있음
      • 주의) 그래프 데이터나 실시간 데이터 같이 유동적으로 변함을 봐야 하는 데이터의 경우 Cache X

    Reference

     

    SOLID. 의존관계 역전 원칙(Dependency inversion principle)

    의존관계 역전 원칙 의존관계 역전 원칙은 객체 지향 설계의 다섯 가지 기본 원칙(SOLID) 중 하나(D)입니다. 이를 인터페이스 편의 설계적인 관점에 넣으려고 했으나 상당히 중요한 부분이기 때문

    blog.hexabrain.net

     

    Flutter TDD Clean Architecture Course [1] – Explanation & Project Structure - Reso Coder

    Subscribe Get the f​ull project Keeping your code clean and tested are the two most important development practices. In Flutter, this is even more true than with other frameworks. On one hand, it's nice to hack a quick app together, on the other hand, l

    resocoder.com

     

    'Flutter' 카테고리의 다른 글

    Flutter - Dartz  (0) 2024.06.01
    Flutter - Open AI 연동  (0) 2024.06.01
    Flutter - 유용한 링크  (0) 2024.06.01
    Flutter - 이슈 해결  (0) 2024.06.01
    Flutter 개발 시작 (macOS)  (0) 2024.01.06