私はこの問題を明確に表現するのに苦労しています。異なるタイプの場合、異なるタイプに変換するために関係をトラバースするメソッドをどのように編成するかに関して、どのような考慮事項がありますか? Car
、Garage
とParkingPass
:正確なモデリングについて寛容でありながらメソッドを戻り値の型または引数で整理しますか?
、例えば、すべての相互間の多対多の関係を持つ3つのクラスがあると想像。
- 車が複数の駐車場を持つことができますが
- 駐車場のパスは車が複数台 を使用することができ、同じパスが複数のガレージ
- 同じパスに使用することができ
- ガレージに駐車することができます渡します
私は擬似Java構文を使用しますが、これは言語固有のものではないと思います。誰かが中に駐車することができます車をガレージ何かを見つけたい場合は、以下の方法が同等に有効なようです:車を与えられたガレージのGarage
オブジェクトをお願い
Car {
Collection<Garage> getGarages();
}
:
はCar
そのガレージのオブジェクトを尋ねます:
Garage {
Collection<Garage> for(Car);
}
いずれかの方法で、オブジェクトは、リレーションシップ・マッピングを解決するためにParkingPass
クラスを通じて移動する必要がありますので、一つのオブジェクトと他の間には直接の変換はありません。
JavaのArrays.asList(クラスとほぼ同じ型の引数をとり、別のクラスを生成します)のような例を見ると、Car.getGarages()
メソッドを実行することが正当だと思われます。代わりに、GuavaのImmutableList.ofを見ると、これは "異なる"型の引数をとり、クラスと同じ型の値を返します。
メソッドを配置する場所を決定する方法をガイドするベストプラクティスはありますか?考えられる解決策には、次のものがあります。
- メソッドの戻り値の型と一致するクラスにメソッドを配置します。これは、クラスが他のオブジェクトを自分自身に変換する方法を「知っている」ことを意味します。
- メソッドの引数と一致するクラスにメソッドを配置します。これは、クラスが自分自身を他のオブジェクトに変える方法を「知っている」ことを意味します。
- 、一つのオブジェクトを消費するユーティリティクラスを紹介し、いくつかのドメイン固有の操作を行い、これらの方法のすべてのための共通の失敗は、順列の問題である別の
を返します - あなたのクラスは非常に連結グラフ方の溶液を形成した場合大規模に成長することが選択されています。
関係について考えをやめ、行動について考え始める。ここでの実際のビジネスユースケースとビジネスの制約は何ですか?これは、どのような振る舞いがどこに行き、抽象化が必要なのかを判断する方法です。 – plalx