2012-04-02 20 views
8

私はJDBCを使ってJavaでいくつかの簡単なDAOを書いています(Spring、Hibernate、その他何もありません)。DAOのパッケージ構造

実装DAOをインターフェイスと同じパッケージに入れたり、サブパッケージに入れる方が良いですか?

例:

com.mycompany.myproject.dao.MyDao 
com.mycompany.myproject.dao.MyDaoImpl 

OR

com.mycompany.myproject.dao.MyDao 
com.mycompany.myproject.dao.impl.MyDaoImpl 

あなたは、サブパッケージ構造を提案した場合、あなたは、サブパッケージ名として何を示唆していますか? .impl? .sql? .jdbc?

現実的には、私は複数の実装を行うつもりはありません。私はこれを工学的に工夫していますか?

+0

全く別の実装 ?単体テストのモックもありませんか? –

答えて

5

アプリケーションを設計するときに、パッケージに構造化する方法はありません。経験は、通常、各自のパッケージの適切な名前が何であるかを判断するのに役立ちます。

インターフェイスの実装を同じパッケージまたは別のパッケージにパッケージ化することについては、Java自体の構造について考えてください。通常、実装クラスはインターフェイスと同じパッケージにパッケージ化されていますが、必ずしもそうではありません。

同じDAOをいくつか実装しようとしている場合は、.jdbc.jpaまたは.jdoサブパッケージで構造化すると意味があります。 1つの実装しか持たない場合は、列挙するオプションの両方が何らかの形で意味があります(同じパッケージまたは.implサブパッケージ)。

オーバーエンジニアリングに関しては、このarticleをお勧めします。 DAOの実装を1つしか持たないにもかかわらず、DAOを他のフレームワークに書き換える潜在的な将来を助けるインターフェイスと実装として定義することは理にかなっていますが、それらは変わらないままです。

最後に、コンセンサスに達し、特定のケースでより合理的な意思決定を下すことは、あなた(またはあなたとあなたの同僚)次第です。アプリケーションは通常、DAOのインターフェイスごとに1つの実装を持っており、それがすべてでオーバーエンジニアリングではありません

EDIT

が、それは単にJPAのためとJDOのために実装され、同じDAOインタフェースを持ってしても意味がありません。 。

PS:私のアプリケーションクラスをサイクルを避けてパッケージに配布するには、通常JDependに依存しています。できるだけ早く

2

私はいずれもだとは思わないが、だと思いますが、この場合は最初の選択肢が好きです。 ArrayListLinkedListなどは、Listと同じパッケージに入っています。

hibernateのような追加のフレームワークを使用する場合は、MyDaoHibernateDaoという2番目のオプションを実装者として使用することをお勧めします。

0

名前空間とパッケージが唯一の衝突を防ぐために存在します。彼らが一意である限りどちらも好ましいものではありません。

+1

だから、あなたのパッケージを長い、ランダムな文字列にするのは大丈夫ですか?わかりやすいパッケージ名を使用すると、ユーザーはAPIをより簡単にナビゲートでき、リファクタリングを簡単に行うことができます。また、実装とインターフェイスを使用すると、多くの場合のみインタフェースや実装のいずれかに依存することになるでしょうとして輸出や依存関係は、パッケージで指定されている環境では良い習慣です。 –

+0

私の答えは、OP事件に特有のものでした。彼/彼女の提案された選択肢の間に客観的な違いはありません。あなたのコメントに関して、私は理解できる名前空間を作成することは常識でしかないと言うことができます。 – nsfyn55

2

(どれも本当に良くありませんが)IMPLがインポートされていて、別のプロジェクトであなたのimplを移動したい場合は、リファクタリングが単純になる場合は、あなたの輸入ですぐに見ることができるので、私は、あなたの第二の選択肢となるだろう。

これはオーバーエンジニアリングではありません。 DAOを使用するために複数の利点があります。

  1. それはあなたのコードをテストする他の考慮事項
  2. からデータベースへのアクセスを切り離すことで、コードの品質が容易になり、あなたが細かい粒とそれをテストすることができますが向上します。
  3. いつか場合は、Hibernateがあなたのために実際に多くの方が簡単であることを見つける、それはあなたのコードの残りの部分には影響しません。
関連する問題