iT邦幫忙

2025 iThome 鐵人賽

DAY 22
1

一個 use case 只做一件事,符合單一原則

AI 寫扣經過

  1. 這個 Use Case 的職責很簡單:從 NoteRepository 獲取所有筆記的 Flow
    class GetCategoriesUseCase @Inject constructor(
        private val repository: NoteRepository
    ) {
        operator fun invoke(): Flow<List<Category>> {
            return repository.getAllCategories()
        }
    }
    
  2. 這個 Use Case 會包含一些基本的業務邏輯,例如在儲存前更新筆記的 updatedAt 時間戳。
    class SaveNoteUseCase @Inject constructor(
        private val repository: NoteRepository
    ) {
        suspend operator fun invoke(note: Note) {
            val currentTime = System.currentTimeMillis()
            val noteToSave = note.copy(
                updatedAt = currentTime,
                // 如果是新筆記,createdAt 也一併設定
                createdAt = if (note.id == 0L) currentTime else note.createdAt
            )
            repository.saveNote(noteToSave)
        }
    }
    
  3. 把幾個簡單的 Use Case 合併在一次 write_file 操作中,建立一個 NoteUseCases.kt 檔案來統一管理
    data class NoteUseCases @Inject constructor(
        val getNotes: GetNotesUseCase,
        val getCategories: GetCategoriesUseCase,
        val saveNote: SaveNoteUseCase,
        val deleteNote: DeleteNoteUseCase,
        val saveCategory: SaveCategoryUseCase
    )
    
    class DeleteNoteUseCase @Inject constructor(
        private val repository: NoteRepository
    ) {
        suspend operator fun invoke(note: Note) {
            repository.deleteNote(note)
        }
    }
    
    class SaveCategoryUseCase @Inject constructor(
        private val repository: NoteRepository
    ) {
        suspend operator fun invoke(category: Category) {
            repository.saveCategory(category)
        }
    }
    

上一篇
114/21 - Vibe Coding 建立領域層
下一篇
114/23 - Vibe Coding 建立導航
系列文
看見筆記捲土重來,試著用 Vibe Coding 完成一款 App 吧!25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
chiaominchang222
iT邦新手 5 級 ‧ 2025-10-06 12:25:47

鐵人深夜寫扣

我要留言

立即登入留言