[Architecture] Matching Cocoa-MVC architecture in a modular architecture
2024. 5. 22. 10:59ㆍ🍏/Architecture
https://github.com/chanheki/swifty-proteins
현재는 pirvate 이지만 완성 후 public으로 공개 예정 레포지토리입니다.
위 프로젝트에서 Modular architecture를 적용하여 설계, 구현하고 있습니다.
레이어별로 모듈화를 나누고 Cocoa-MVC 패턴을 적용하기 위해 정리한 내용입니다.
모듈러 아키텍처 설계
- App Layer
- 앱의 진입점 및 전체적인 앱 라이프사이클 관리
- 주요 앱 설정 및 초기화 코드
- Feature Layer
- 사용자 인터페이스 및 사용자의 액션을 처리
- 뷰(View) 및 뷰와 관련된 로직
- 각 기능별로 독립적인 UI 및 로직 (AuthFeature, ProfileFeature 등)
- Domain Layer
- 비즈니스 로직과 애플리케이션의 도메인 모델
- 엔터티, 유스케이스, 리포지토리 인터페이스 등
- 비즈니스 로직 및 ViewModel 역할
- Core Layer
- 앱의 비즈니스를 포함하지 않는 순수 기능성 모듈
- 네트워킹, 데이터베이스, 바이오메트릭스 등 (NetworkingModule, DatabaseModule 등)
- Shared Layer
- 공용으로 사용되는 모델, 유틸리티, 확장 기능 등
- 로깅, 확장 기능, 공통 유틸리티 (UtilityModule, LoggingModule 등)
- Shared (UserInterface) Layer
- 공용 뷰, 디자인 시스템, 리소스 등 UI 요소
- 디자인 시스템, 공용 뷰 요소 (DesignSystem, LocalizableManager 등)
Cocoa-MVC와 모듈러 아키텍처의 매칭
Model
- Domain Layer
- 도메인 모델 및 비즈니스 로직
- 엔터티, 유스케이스, 리포지토리 인터페이스 등
- 예: AuthDomain, ProfileDomain, ProteinDomain
- Shared Layer
- 공용 모델 정의
- 예: ProteinModel 등
View
- Feature Layer
- 사용자 인터페이스 및 뷰 로직
- 뷰를 구성하는 UI 컴포넌트
- 예: AuthFeature, ProfileFeature, ProteinFeature
- Shared (UserInterface) Layer
- 공용 뷰 요소 및 디자인 시스템
- 예: DesignSystem, LocalizableManager
Controller
- Feature Layer
- 사용자 액션을 처리하고 뷰와 상호작용하는 로직
- 컨트롤러 역할을 담당하는 뷰 컨트롤러
- 예: AuthFeature 내의 AuthViewController, ProteinFeature 내의 ProteinViewController
매칭 예시
Model (Domain Layer, Shared Layer)
Domain Layer
|
|-- AuthDomain
|-- ProteinDomain
|
Shared Layer
|
|-- ProteinModel
|-- UtilityModule
|-- LoggingModule
View (Feature Layer, Shared (UserInterface) Layer)
Feature Layer
|
|-- AuthFeature
|-- ProfileFeature
|-- ProteinFeature
|
Shared (UserInterface) Layer
|
|-- DesignSystem
|-- LocalizableManager
Controller (Feature Layer)
Feature Layer
|
|-- AuthFeature
|-- AuthViewController
|-- ProfileFeature
|-- ProfileViewController
|-- ProteinFeature
|-- ProteinViewController
'🍏 > Architecture' 카테고리의 다른 글
[Clean Architecture] Presentation(MVVM), Domain, Data (0) | 2024.08.30 |
---|---|
[Architecture] 프로젝트에 Modular Architecture를 적용하는 이유 (0) | 2024.05.25 |
[Architecture] Modular Architecture iOS 개념 정리 (0) | 2024.05.24 |
[Architecture] Matching MVVM architecture in a modular architecture (0) | 2024.05.23 |
[Architecture] Modular Architecture / MFA에서 추상레이어의 Export (0) | 2024.04.01 |