典型的な n 層 Java アプリケーションがあり、データ アクセス層に FooDAO および FooDAOImpl 型の DAO があることに気付きました。私は 2 つの必要性を正当化しようとしていましたが、これが私の分析です。
- 同じインターフェースに複数の実装がある場合、抽象化が役に立ちます。しかし、DAOImpl (iBATIS など) に使用するフレームワークを既に選択した場合、それは本当に必要なのでしょうか?
- Spring 経由のプロキシを支援します。私が収集したものから、インターフェースを持つクラスは、インターフェースを持たないクラス (cglib ルートが選択される) よりも簡単に (JdkProxy ルートに行く) プロキシすることができ、プロキシされるクラスのサブクラスがあります。サブクラス化には、プロキシするクラスが final であるか、デフォルトのコンストラクターがない場合に問題があります。どちらも、データ アクセス層ではほとんどありません。以前はパフォーマンスが要因でしたが、私が聞いたところによると、もはや心配する必要はありません。
- あざけるのを手伝ってください。インターフェイスを持つクラスは、モック フレームワークによるモックに適しています。私はこれを聞いたことがありますが、実際に見たことはありません.
これらの点を考えると、単純な FooDAO で十分なはずの FooDAO と FooDAOImpl を個別に用意する必要はないと思います。私が言及した点を自由に修正してください。
前もって感謝します!