🐣
mypyaudioのアーキテクチャについて
mypyaudioという超シンプルな音声ダウンロードプログラムを作成しました。python main.py <command> <url> <file_path>
のように実行することを想定しています。
アーキテクチャど素人なので「もっとこうしたら良くなるよ」という点があれば、優しく教えてください。
アーキテクチャ
プレゼンテーション層、アプリケーション層、データアクセス層を持つ「3層アーキテクチャ」
アプリケーション層にデータアクセス層のインターフェースを置いて、DIP (依存性逆転の原則) を意識しました。
現状はCLIからの操作のみですが、プレゼンテーション層は柔軟に変更することができる想定です。
正直「レイヤードアーキテクチャ」と「クリーンアーキテクチャ」の違いがよく分かりません。
反省
命名
- 個人用途とはいえ、GeneralAudioRepository、BinaryWriter、AudioFileWriterは全くしっくりこない (だからと言ってもっと良い案も出てこない)
例外処理
- アプリケーション層、データアクセス層で例外が発生した場合に、個々にロギングまで行ってしまっていた (アンチパターン)
- ロギングなどの共通処理は呼び出し元 (プレゼンテーション層) にまとめる
疑問
命名
- アプリケーション層のユースケースはHogeUseCaseのように、末尾に「UseCase」をつけるべきなのか?
- ユースケースのメソッドは必ずexecute()であるべきなのか?
責務
- HandlerとControllerの責務の違い (Handlerはコマンドライン、ControllerはHTTPのプレゼンテーション層で使われる?)
Discussion