2016-12-13 9 views
3

私はすべて正常に動作する推奨アルゴリズムを開発中です。しかし今、私はこのコードを私の開発チームの支店に実装したかったのです。異なる種類のオブジェクトでリストを塗りつぶす

私は上から開始します。私のアルゴリズムは2種類のオブジェクト、レストラン、料理をお勧めします。

レストラン:

public class Restaurant 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public Address Address { get; set; } 
    public List<Tag> Tags { get; set; } = new List<Tag>(); 
    public int PriceRange { get; set; } 
} 

皿:

public class Dish 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public double Price { get; set; } 
    public virtual Restaurant rest { get; set; } 
    [ForeignKey("rest")] 
    public Guid RestaurantId { get; set; } 
    public List<Tag> Tags { get; set; } 
} 

が今私の製品の所有者は、それが我々のアプリのホームページに表示されていたときに、リストはこのようになりたい:

[Restaurant][Dish][Restaurant][Dish] Etc... 

基本的に、彼は推奨されているオブジェクトの種類を交互にしたいと考えています。これらの料理とレストランは完全に別です。それらは私のアルゴリズムによって純粋にユーザーの好みに基づいて生成され、お互いに全く相関がありません。

私の問題は、このようなリストを返す方法です。私はList<RecommenderItem>作成し、クライアントにそれを返すことができ

public class RecommenderItem 
{ 
    public Restaurant rest { get; set; } 
    public Dish dish { get; set; } 
} 

この方法:私は、私はこのようなどちらかRestaurantまたはDishが含まれているラッパークラスを必要とするはずと考えました。クライアントは、どの属性がヌルであるかをチェックし、ヌルでない値から値を取り出すだけで済みます。

これが正しいアプローチであるかどうかは分かりません。これにはベストプラクティスがありますか?私がもっと詳しく説明する必要があるかどうかを教えてください!

+0

は個人的に私は、このようなId' 'などの共有の性質を、公開するインターフェイスを実装し、両方のクラスを持っていると思いますと 'Name'(例えば' Tags')を作成し、そのインターフェースのリストを作成します(インターフェースは '' Type''をエクスポーズすることもできます) –

+2

'RecommenderItem'は、それはそれぞれのレストランに関連付けられている料理のリストです。あなたの戻り値の型はそれを反映するはずです。 –

+0

@ Me.Nameでも、クライアントは各オブジェクトのすべてのデータを表示したいと考えていますが、問題はありませんか? – RandomStranger

答えて

2

共通の基本クラスを持たない場合は、1つのラッパークラスを作成することが最適です。同時に、あなたは、より柔軟にし、だから、あなたは、このクラスおよびクライアントにすべての一般的な情報を含めることができ

public class RecommendationItem 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public string PageUrl { get; set; } 
    public object Entity { get; set; } 
} 

のようなものを作成することができ、彼が働くオブジェクトタイプに確認する必要はありません。そのような場合、もう1つのアイテムタイプを追加する方が簡単です。同じタイプでは、エンティティ自体への参照を追加しました.1つまたは2つのアイテムタイプの特定の処理が必要な場合に使用できます。

+0

ああ、私は 'Entity'がどのタイプであるかをチェックし、それに応じて使用する必要がありますか? – RandomStranger

0

要素のペアを接続する場合は、常に要素をペアにすることができます。私は、各料理は特定のレストランに固有であると仮定していますか?だからリストは[レストラン1] [レストラン1用の料理] [レストラン2] [レストラン2用の料理] ...でしょうか?

私はoryolの以前の回答が共通の基本クラスを作成するのが好きです。

したがって、あなたのRecommenderItemクラスは問題ありません。しかし、両方の特性を記入し、ペアのリストを返す。新しいリストを作成し、RecommenderItemsのリストを繰り返し、その中の各エントリからRestaurantとDishを追加して、リストを表示用の完全なセットに展開します。あなたが入力することができ、より

public interface IRecommenderItem 
{ 
    //shared properties 
} 

public class Restaurant : IRecommenderItem 
{ 

} 

public class Dish : IRecommenderItem 
{ 

} 

+0

彼らはペアではありません。料理とレストランは完全に別です。私のアルゴリズムは、純粋にユーザーからの情報に基づいてこれらの推奨事項を生成します。私のプロダクトオーナーは、ユーザーのホームページでタイプを交互にしたいだけでした。 – RandomStranger

+0

ああ!まあ、それは私が2番目の推測のために得るものです! – Brian

1

あなたは、インタフェースIRecommenderItemを宣言することができ

List<IRecommenderItem> m = new List<IRecommenderItem>(); 
関連する問題