Skip to content

Taerogrammer/Tuist_CleanArchitecture

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 

Repository files navigation

Tuist_CleanArchitecture

📐 Architecture

이 프로젝트는 확장성 및 유지보수성을 극대화하기 위해, 클린 아키텍처를 기반으로 한 모듈화 구조를 채택하고 있습니다.

주요 원칙

  1. 관심사의 분리 (SoC): 각 레이어(Feature, Domain, Data)는 명확하게 자신의 책임에만 집중합니다.
  2. 의존성 규칙 (Dependency Rule): 의존성 방향은 항상 외부에서 내부로, 불안정한 것에서 안정적인 것으로 향합니다.
  3. 의존성 역전 원칙 (DIP): 상위 모듈은 하위 모듈의 구체적인 구현이 아닌, 추상화(Interface)에 의존합니다.

의존성 흐름

CoreSharedUI는 서로를 의존하지 않는 독립적인 형제 관계입니다. Feature와 같은 상위 계층에서 이 둘을 모두 필요로 할 경우, 각각 의존성을 추가하여 사용합니다.

            [App]
              │
              ▼
        [Umbrella(DI)]
┌─────────────┴─────────────┐
│             │             │
▼             ▼             ▼
[Feature]     [Data]     [Domain]
    │             │           │
    ├─────────────┴───────────┤
    │                         │
    ▼                         ▼
[SharedUI]                  [Core]
    │
    ▼
[DesignKit]

의존성 상세 흐름:

  • AppUmbrella(DI)
  • Umbrella(DI)Feature, Domain, Data, SharedUI, Core, DesignKit 등 모든 구현체
  • FeatureDomain.Interface, SharedUI, Core
  • DataDomain.Interface (이를 통해 간접적으로 Core 사용)
  • DomainCore
  • SharedUIDesignKit
  • Core는 다른 프로젝트 모듈에 의존하지 않습니다.
  • SharedUICore에 의존하지 않습니다.
  • DesignKit은 다른 프로젝트 모듈에 의존하지 않습니다.

레이어 설명

📲 Feature

  • 역할: 사용자가 보는 화면과 상호작용을 담당하는 UI 레이어입니다.
  • 의존성: 자신이 필요한 Domain.Interface와 UI 구성을 위한 SharedUI, 그리고 비즈니스 로직과 무관한 공통 기능이 필요할 경우 Core를 의존합니다.

🧠 Domain

  • 역할: 앱의 핵심 비즈니스 로직을 담당합니다. 순수한 비즈니스 규칙, 유즈케이스(Use Case), 엔티티(Entity), 그리고 Repository의 **인터페이스(Interface)**를 포함합니다.
  • 의존성: Core를 의존합니다. FeatureData 등 외부 레이어에 대해서는 알지 못합니다.
  • 특징: 각 기능 단위(FirstDomain, SampleDomain)로 모듈이 분리되어, 인터페이스 분리 원칙을 준수합니다.

💽 Data

  • 역할: Domain 레이어에 선언된 Repository Interface구현체를 제공합니다. 실제 데이터 소스(네트워크, 데이터베이스 등)와의 통신을 책임집니다.
  • 의존성: 자신이 구현해야 할 Domain Interface와 실제 데이터 통신에 필요한 DataSource 모듈에 의존합니다.

🏗️ Foundation Layers

  • 역할: 앱의 가장 기반이 되는 공통 기능 및 UI 요소들을 제공합니다. CoreSharedUI는 서로 의존하지 않는 독립적인 관계입니다.
  • Core: 'Shared Kernel' 역할을 하는 가장 중요한 공통 모듈입니다. UI와 완전히 무관하며, 기본 모델, 유틸리티, 확장 기능 등 모든 레이어에서 공유하는 코드를 포함합니다.
  • DesignKit: 색상, 폰트, 기본 UI 컴포넌트(Atom) 등 가장 순수한 UI 부품들을 모아둔 모듈입니다.
  • SharedUI: DesignKit을 바탕으로, 여러 피처에서 재사용될 수 있는 더 복잡한 UI 컴포넌트(Molecule, Organism)를 제공합니다.

☂️ Umbrella

  • 역할: 의존성 주입(DI)을 전담하는 '조립 공장'입니다. 앱 실행에 필요한 모든 모듈들의 구체적인 구현체를 생성하고, 서로의 의존성을 연결해주는 역할을 합니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published