以下のUdemyの教材で「Clean Architecture」について学んでみました。
セクション2とセクション3を視聴したことで
『「Clean Architecture」に登場する「Entities」「Use Cases」とは何か?』を少し理解できました。
Clean architecture & SOLID principles for Android in Kotlin
https://www.udemy.com/course/cleanandroid/
コース内で作成されるアプリはシンプルなメモ帳アプリでKotlinの基礎がある程度できている人であれば理解できる内容かなと思います。
この教材で「Entities」「Use Cases」は理解できたけど、教材内で触れられていない「Controllers」「GateWays」「Presenters」も理解したいと思い、GPTに以下のように質問を投げたら以下のように回答が返ってきました、
Android開発でメモ帳アプリを作成しています。
Clean Architectureに登場する
「Entities」「Use Cases」「Controllers」「GateWays」「Presenters」
について詳しく教えて頂けますか?
コードの具体例もあると助かります。
# Android開発でメモ帳アプリを作成しています。
Clean Architectureに登場する
「Entities」「Use Cases」「Controllers」「GateWays」「Presenters」
について詳しく教えて頂けますか?
🗒️ Answer
1. Entities:
- 役割: アプリケーションのビジネスルールやデータを表す。データベースやUIとは独立していて、アプリのコアな部分を担う。
-
例:
NoteEntity
data class NoteEntity(val id: Int, val title: String, val content: String)
2. Use Cases:
- 役割: ビジネスロジックを実行し、Entitiesを操作する。ユーザーアクションに応じて処理を行い、適切なデータを取得・更新する。
- メモを追加・更新・削除等 (➡️これは自分が補足した。)
-
例:
SaveNoteUseCase
class SaveNoteUseCase(private val noteRepository: NoteRepository) { fun execute(note: NoteEntity) { noteRepository.save(note) } }
3. Controllers:
- 役割: ユーザーからの入力を受け取り、適切なUse Caseを呼び出す。UIから直接操作されることが多い。
-
例:
NoteController
class NoteController(private val saveNoteUseCase: SaveNoteUseCase) { fun onSaveButtonClicked(note: NoteEntity) { saveNoteUseCase.execute(note) } }
4. GateWays:
- 役割: データベースやネットワークなど、外部システムとのやり取りを管理する。RepositoryがGatewayに該当することが多い。
-
例:
NoteRepository
class NoteRepository(private val noteDao: NoteDao) { fun save(note: NoteEntity) { noteDao.insert(note) } }
5. Presenters:
- 役割: Use Casesから受け取ったデータをUIに適した形に変換し、Viewに渡す。ViewModelがPresenterに該当することが多い。
-
例:
NotePresenter
class NotePresenter(private val view: NoteView) { fun present(note: NoteEntity) { view.show(note.title, note.content) } }
🌐 Sources
- qiita.com - 実装クリーンアーキテクチャ
- gist.github.com - クリーンアーキテクチャ完全に理解した
- zenn.dev - やさしいクリーンアーキテクチャ
- qiita.com - 一通り Android-CleanArchitectureの流れを読んでみるメモ
- note.com - Android開発におけるアーキテクチャー設計について
- techblog.insightedge.jp - 生成AIアプリのクリーンアーキテクチャを考える
間違っていると思われた際は、ご指摘頂けますと幸いです。