2011-10-17 6 views
0

これは基本的に、フロントエンドオブジェクトのリストを取得し、各フロントエンドオブジェクトを呼び出し、データオブジェクトのリストを返します。ラッパーオブジェクトから取得したデータオブジェクトのリストを返す汎用メソッドを書く必要があります。

私はこのメソッドをシングルトンクラスの中に記述しました。

public IEnumerable<T> GetDataItemsFromFrontend<T>(IEnumerable<T> frontendItems) 
    { 
     List<T> dataItems = new List<T>(); 
     foreach(T frontendItem in frontendItems) 
      { 
       dataItems.Add(T.GetDataItem()); 
      } 
     return dataItems; 
    } 

当然、T.GetUser()は存在しません。

私はEntity-Model Frameworkによって生成されたUserというエンティティオブジェクトを持っています。 Userに機能を追加するために、ClassFrontendというラッパーオブジェクトを作成しました。ここで、classは問題のエンティティタイトル(UserFrontend、RoleFrontendなど)に置き換えられました。

私は、フロントエンドクラスのData内でエンティティオブジェクトを呼び出しました。

ここでは、フロントエンドアイテムのリストを提供するGenericメソッドを使用したいと思います。エンティティオブジェクトのリストを戻します。もちろん、リストはすべて同じタイプです。例すべてのUserFrontend 、またはすべてのRoleFrontendなど

ありがとうございました。

+0

あなたはメソッド 'GetDataItemを()'を作成できませんか?また、入力上の 'T 'は入力上にある' T'と同じではないのでしょうか? – svick

+0

皆さんありがとう!それは基本的に :)解決Iた2つの署名方式とのインターフェース: 'code'publicインタフェースIBaseFactory {IEnumerableを GetDataItemsFromFrontend(IEnumerableをフロントエンド)。 IEnumerable GetFrontendItemsFromDataItems(IEnumerable dataItems); } 'code' 各フロントエンドクラスに実装されています。 – Franco

答えて

2

Iフロントエンドオブジェクトは以下のようなインターフェイスを実装するだろう:あなたは、すべてのフロントエンドクラスが実装するインタフェースで、あなたのコードサンプルで持っているよう

public interface IFrontEndEntity<TEntity> 
{ 
    TEntity GetEntity(); 
} 
public static class FrontEndExtensions 
{ 
    public static IEnumerable<TEntity> GetEntities<TEntity>(this IEnumerable<IFrontEndEntity<TEntity>> frontEndItems) 
    { 
     return frontEndItems.Select(a => a.GetEntity()); 
    } 
} 
public class Dog 
{ 
} 
public class DogFrontEnd : IFrontEndEntity<Dog> 
{ 
    public Dog Entity { get; set; } 
    public Dog GetEntity() 
    { 
     return Entity; 
    } 
} 
public class Main 
{ 
    public void Run() 
    { 
     IEnumerable<DogFrontEnd> dogFronEnds = new List<DogFrontEnd>(); 
     IEnumerable<Dog> dogs = dogFronEnds.GetEntities(); 
    } 
} 
0

GetDataItem()メソッドを使用してインターフェイスを作成し、すべてのエンティティで実装し、メソッドをwhere T : IYourEntityに制限します。

関連する問題