最近、抽象クラスの使用について困っています。
時々、抽象クラスが事前に作成され、派生クラスがどのように機能するかのテンプレートとして機能します。つまり、多かれ少なかれ、それらはいくつかの高レベルの機能を提供しますが、派生クラスによって実装される特定の詳細を除外します。抽象クラスは、いくつかの抽象メソッドを配置することにより、これらの詳細の必要性を定義します。そのような場合、抽象クラスは設計図、機能の高レベルの説明、またはそれと呼ぶもののように機能します。単独では使用できませんが、高レベルの実装から除外された詳細を定義するために専門化する必要があります。
場合によっては、いくつかの「派生」クラスの作成後に抽象クラスが作成されることがあります(親/抽象クラスがそこにないため、それらはまだ派生されていませんが、私が何を意味するか知っています)。これらの場合、抽象クラスは通常、現在の派生クラスに含まれるあらゆる種類の共通コードを配置できる場所として使用されます。
上記の観察をしたので、私はこれらの2つのケースのどちらがルールであるべきか疑問に思っています。派生クラスすべてに共通しているという理由だけで、抽象クラスに詳細を吹き込む必要がありますか?高レベルの機能の一部ではない一般的なコードがありますか?
たまたま派生クラスに共通しているからといって、抽象クラス自体には意味がないコードが存在する必要がありますか?
例を挙げましょう。抽象クラスAにはメソッドa()と抽象メソッドaq()があります。メソッドaq()は、派生クラスABとACの両方で、メソッドb()を使用します。b()をAに移動する必要がありますか?もしそうなら、誰かがAだけを見ている場合(ABとACがそこにないふりをしよう)、b()の存在はあまり意味がありません!これは悪いことですか?誰かが抽象クラスを見て、派生クラスにアクセスせずに何が起こっているのかを理解できる必要がありますか?
正直なところ、この質問をしている時点で、派生クラスを調べなくても意味のある抽象クラスを書くことは、クリーンなコードとアーキテクチャの問題だと信じがちです。anyあらゆる種類のコードのダンプのように機能する抽象クラスのアイデアが、すべての派生クラスで一般的に発生するのを嫌う
あなたはどう思いますか/練習しますか?
Writing an abstract class that makes sense without having to look in the derived classes is a matter of clean code and clean architecture.
- なぜ?アプリケーションの設計と開発の過程で、いくつかのクラスに共通の機能があり、自然に抽象クラスにリファクタリングできることを発見できませんか?派生クラスのコードを書く前に常にこれを予期できるほど透視力が必要ですか?私がこの慎重さを欠く場合、そのようなリファクタリングを実行することは禁止されていますか?コードを捨ててやり直す必要がありますか?