私は映画再生関連のアプリに取り組んでおり、現在いくつかの設計上の問題に直面しています。
ご想像のとおり、ファイル パス、ファイル サイズなどのプロパティを持つムービー クラスがあります。ムービー クラスは、ムービーの内部構造について何も認識せず、ムービー ファイルを直接デコードしません。
それを達成するために、別の大きなクラスがあります: デコーダーです。このクラスは、継続時間、フレーム レートなどのすべてのムービーの内部情報を認識します。また、ファイルからビデオまたはオーディオ データを取得するメソッドも提供します。デコーダはサードパーティのライブラリを使用し、多くの C ポインタを渡す必要があるため、デコーダを小さなチャンクに分割することはあまり意味がありません。メモリ管理などを簡単にするために、それは避けたいと思います。
ムービーは、デコーダー自体がムービー クラスの戦略パターンを使用して実装されているため、明確に定義されたインターフェイスを備えたデコーダーを保持します。
Movie ----------------> Decoder (implements interface)
| |
v v
File related variables Movie internals
この設計は情報隠蔽と SRP の点で優れているかどうか疑問に思っています。外部のすべてのクラスは、ムービーに一連のプロパティを持つデコーダーがあることを認識しています。映画があることだけを知ってもらったほうがいいのではないか。しかし、ムービー クラスが巨大になり、デコーダのプロパティにのみアクセスするスタブ メソッドが多数存在することになります。
アドバイスをいただければ幸いです。
編集:
Facade パターン (@Erik の回答に触発されたもの) を詳しく調べたところ、ここで完全に一致しているように見えます。Movie クラスをさらに細分化することはできますが、「外の世界」は複雑さを避けるために詳細を知る必要はありません。ただし、これにより、多くのメソッドを持つ Facade クラスが生成されます。
したがって、外側から見ると巨大なクラスのように見えますが、内側を見ると論理的なレンガにうまく分離されています。それで大丈夫だと思いますか?