🐣

mypyaudioのアーキテクチャについて

2025/01/15に公開

mypyaudioという超シンプルな音声ダウンロードプログラムを作成しました。
https://github.com/noooda/mypyaudio
CLIからpython main.py <command> <url> <file_path> のように実行することを想定しています。
アーキテクチャど素人なので「もっとこうしたら良くなるよ」という点があれば、優しく教えてください。

アーキテクチャ

プレゼンテーション層、アプリケーション層、データアクセス層を持つ「3層アーキテクチャ」
アプリケーション層にデータアクセス層のインターフェースを置いて、DIP (依存性逆転の原則) を意識しました。
現状はCLIからの操作のみですが、プレゼンテーション層は柔軟に変更することができる想定です。
正直「レイヤードアーキテクチャ」と「クリーンアーキテクチャ」の違いがよく分かりません。

反省

命名

  • 個人用途とはいえ、GeneralAudioRepository、BinaryWriter、AudioFileWriterは全くしっくりこない (だからと言ってもっと良い案も出てこない)

例外処理

  • アプリケーション層、データアクセス層で例外が発生した場合に、個々にロギングまで行ってしまっていた (アンチパターン)
  • ロギングなどの共通処理は呼び出し元 (プレゼンテーション層) にまとめる

疑問

命名

  • アプリケーション層のユースケースはHogeUseCaseのように、末尾に「UseCase」をつけるべきなのか?
  • ユースケースのメソッドは必ずexecute()であるべきなのか?

責務

  • HandlerとControllerの責務の違い (Handlerはコマンドライン、ControllerはHTTPのプレゼンテーション層で使われる?)

Discussion