デザイン/フレームワークを実行している間は、Value Object、Services、DAOなどのベースクラスを持つのが普通です。例えば、新しいVOを作成すると、そのBaseVO 。新しいDAOを作成する場合は、BaseDAOから拡張する必要があります。私たちがそのような基本クラスを持っている理由は何ですか?なぜJavaでBaseクラスを使用するのですか
答えて
継承は、カプセル化と多態性とともに、オブジェクト指向プログラミングの3つの主要な特性の1つです。継承(基本クラスを継承する)により、他のクラスで定義されている動作を再利用、拡張、変更する新しいクラスを作成できます。
一般的なメソッドとプロパティを基本クラスに簡単に追加できます。しかし、それはすべての場合に正しい方法ではありません。デザインパターン(Strategy Patternなど)は、上記のOOPの概念を使用して実際の設計を行います。
親クラスを持つことは、すべての子プロセスに適用できるビヘイビアとデータメンバーが継承ツリーの上に移動できるようにすることをお勧めします。例えば
:
Object toString();
回答は明白です;) それは、共通の機能またはロジックアプリケーション全体を追加するのは簡単なので。
たとえば、値オブジェクトの作成日と変更日を常に保存する場合は、または、サービスでデータベース接続を取得するヘルパーメソッドを提供します。
フレームワークを拡張するときに、時には保存する必要がある機能やフィールドがあります。簡単な例を考えてみましょう。私たちが名前と能力を持った動物を持っているなら(私の場合は学校の例ですが)、動物であればそれらのものがあればいいはずです。だから、猫がいると言うと、明らかに猫は犬と同じことを言っていないので、両方ともSpeak()の能力を持っている間に2つの異なる結果が得られます。
あなたのケースでは、コードの大部分を書き直すことなくレイヤーを交換することができるように(時には何も変更する必要はない場合もあります)、拡張性と互換性のあるシステムを作成します。
私はかつての文を聞いたことがあるし、それをここに引用:
small programs have a funny way of getting bigger quickly
。
プロジェクトがますます大きくなるにつれて、より柔軟で具体的にする必要があります。したがって、サービスとビジネスロジックを疎結合させることで、オブジェクトが他の実装に依存するのを避けることができます。
BaseDAOは、後継クラス全体で使用される一般的なメソッドで構成されるか、すべての拡張クラスに必要な動作として実装する必要がある抽象メソッドを定義することもできます。
BaseDAOがそのすべてのサブクラスに対して行うことができる例は、データベースへの接続の設定または取得です。 AppleDAO、PearDAO、BananaDAO(あなたのDBに保存したいものがApple、Pear、Bananaの場合)に同じコードを記述するのはかなり難しいでしょう。
DB接続をすべて取得するコードを入力した場合は、すべてを変更する必要があります。データベースホストが変更されたとき。スーパークラスにある場合は、1つの場所で変更するだけです。
- 1. Baseクラスのプロパティを使用する派生クラスですか?
- 2. Javaでは、宣言する前にクラス内のクラスを使用するのはなぜですか?
- 3. なぜ私は継承でBASEを使用できません
- 4. Baseクラスのメソッドで抽象プロパティ値を使用できますか?
- 5. Java ReloadableResourceBundleMessageSourceをjavaクラスで使用する
- 6. javaでクラスを作成するときに、なぜclassキーワードnot typeを使用するのですか?
- 7. Java Patternクラスがコンストラクタではなくファクトリメソッドを使用するのはなぜですか?
- 8. JavaでPropertiesクラスが必要なのはなぜですか?
- 9. JavaがArrayListクラスを使用してHashtable/HashMapクラスを実装していないのはなぜですか?
- 10. Cloud Baseのクラウド機能でNode.jsクラスを使用
- 11. Java(Android)で異なるクラスを使用しますか?
- 12. C++:Baseクラスの派生クラスのみの変数を使用
- 13. なぜC#で定数の内部クラスを使用するのですか?
- 14. Pythonでこのクラスを使用するのはなぜですか?
- 15. 誰かがJavaでCollections.emptyListを使用するのはなぜですか?
- 16. なぜJava 7を使用すべきか、なぜ使用しないのですか?
- 17. なぜandroid Logクラスを使用すべきですか?
- 18. 私のC++クラスでQtを使用できないのはなぜですか?
- 19. 私のクラスでforeachを使用できないのはなぜですか?
- 20. Javaで継承を使用するクラス
- 21. Javaでクラスを使用する
- 22. なぜ派生クラスで宣言を使用するのですか?
- 23. ブートストラップ4がes6クラスでプライベートメソッドを使用するのはなぜですか?
- 24. Javaでのように、このコードがクラス変数を使用していないのはなぜですか?
- 25. クラス定義でrequire *ステートメントを使用できないのはなぜですか?
- 26. HttpServerUtility.HtmlEncodeをクラス内で使用できないのはなぜですか?
- 27. __init__キーワードargでクラス変数を使用できないのはなぜですか?
- 28. JavaではなぜArrays.copyOfのソースコードが反射を使用するのですか?
- 29. Javaで静的初期化ブロックを使用するのはなぜですか?
- 30. なぜ私たちは:: {}をjava loggerで使用するのですか