1

私はいくつかの異なる方法で並べ替える必要があるクラスを持っています。その多くはequals()契約を破っています。そのため、異なるComparatorクラスを持つ必要があります。私が持っている質問は、それらのクラスがどこに住んでいるかです。Comparatorはドメイン駆動型のMVC世界ではどこに住んでいますか?

例の名前空間の構造として使用すると、構造ではなく、ファイル構造をパッケージ化する質問を制限するために、具体的な何かがあるように、次の名前空間を想定することができます:クラスはdomain名前空間に住んで

app 
    domain 
    exception 
    hibernatemapping 
    mvc 
    propertyeditor 
    tags 
    persistence 
    hibernate 

ドメイン、および関連する例外および休止状態マッピングファイルはそれぞれexceptionおよびhibernatemappingにあります。 persistenceには、DAOインターフェイスが保持され、休止状態の実装はhibernateになります。すべてのMVCコントローラはmvcにあり、特殊なプロパティエディタ(これはSpring MVC)がpropertyeditorに、カスタムクラスのバッククラスがtagsになっています。

Comparatorsは、domain名前空間(おそらくdomain.comparator)の下に住んでいるはずですが、わかりません。

あなたはどこにそれらを置くのですか?


アップデート:一般的なUtilパッケージを使用している人がたくさんあります。そのルートに行くときは、UIヘルパーとドメインヘルパーによるクラスUtilを除外しますか?たとえば、ドメインがビジネスロジック上の理由でソートする必要があるが、UIでドメインが気にしない追加のソートが必要だった場合、基本的には、レイヤごとにヘルパーパッケージを持つ傾向がありますか?私は通常、次のような構造で行く

答えて

3

あなたが何かを置く場所がわからない場合は、 "goto"パッケージとして使用することはできませんが、utilやcommonsパッケージのようなものが最も理にかなっているようです。

また、package by featureを調べることをおすすめします。この理由で、あなたのコンパートメントは、それに使用されている対応する機能を持っていてもかまいません。繰り返しますが、これは単なる提案であり、プロジェクトの最適なレイアウトを呼び出す必要があります。

+0

+1機能別パッケージです。いくつかのプロジェクトでは、バニラドメイン/ dao/service/controllerの式が理にかなっています。 – Kevin

+0

それで、パッケージバイフィーチャの世界では、コンパレータは物が比較されるのと同じパッケージに入っていますか?例えば。 'Foo'コンパレータは' app.foo'パッケージに入っていますか? – cdeszaq

+0

をパッケージごとにフィーチャーする場合は、そのフィーチャーを構成するモデル、DAO、サービス、およびその他のクラスを持つapp.myfeatureを使用します。おそらくコントローラはまだいくつかの他のパッケージに存在し、サービス層としか話していないでしょう。 – Kevin

0

:このタイプの構造では

company 
    appname 
    model 
    util 
    dao 
    service 
    controller 

(コンパレータの多くが実際にあった場合)は、コンパレータは、おそらくutilのパッケージに投棄になるだろう。

しかし、通常コンパイラは正確に1か所で使用されるため、実際に使用されているインラインで宣言します。

public class SomeService { 
    public void someMethod(String id) { 
     List<ListType> list = dao.getSomeListById(id); 
     Collections.sort(list, new Comparator<ListType>() { 
      public compare(ListType a, ListType b) { 
      // ... 
      } 
     }); 
    } 
} 
0

「app.util」または「app.helper」というパッケージを作成することをお勧めします。

概念的に言えば、ドメイン駆動型設計では、これはインフラストラクチャ層(http://www.infoq.com/articles/ddd-in-practice)に属しています。

+0

インフラストラクチャとutilの両方が幅広いです。 utilに関する素晴らしい点は、/ short /です。 – Kevin

0

comparatorsというパッケージを作成しました。そこには私が保管しています。