2009-08-11 8 views
0

私は、SQL Server 2005データベースを格納するデータベースサーバー、Microsoft Three Tier Service Applicationをインストールしたアプリケーションサーバー、およびコントローラを監督するMVPを使用するWebサーバーを使用して、分散型Webアプリケーションを使用しています。私はのは言わせて国のリストを要求したとき電線を通じてIEnumerable <T>をシリアル化しますか?

私のサービス層は、アプリケーションサーバ上で、IEnumerable<Country>を返します。サービス層は、このようなエンティティを生成するデータアクセスコンポーネントを呼び出します:

public virtual IEnumerable<T> FillList(DbCommand command, DataContext context) 
{ 
    using (IDataReader dataReader = this.ExecuteReader(command, context)) 
    { 
     while (dataReader.Read()) 
     { 
      T entity = this.Fill(dataReader, context); 
      yield return entity; 
     } 
    } 
} 

私は私にWCFを通じてエンティティをシリアル化するとき、それは開いたままになりますように私は、今、私のデータベースへの接続について少し心配ですコントローラ。私の最初の質問は、エンティティごとにエンティティをコントローラにシリアル化するときに、データベース接続を開いたままにしておくことが本当に懸念事項であるかどうかです。このソリューションの利点は、LINQを大規模なコレクション(LINQ to SQLではなく)でも使用できることです。

私はこの解決策を思い付いた:サービス層では、私はいつもこのように、リストを返す:

public virtual List<T> GetList() 
{ 
    List<T> list = new List<T>(); 
    list.AddRange(this.dataAccess.GetList())); 
    return list; 
} 

しかし、ここで私は、コントローラへの完全なリストを返すよ、おそらく私だけ必要リストの中のいくつかの項目。私の2番目の質問は、これが良いデザインであるかどうかです。

お待ちしております。

+2

「Microsoft Three Tier Service Application」とは何ですか? Googleからのこの言葉の唯一のヒットはこの質問です! –

答えて

0

私はデザインに特別な問題はありません。もちろん

、あなたはTList<T>であるかについて慎重になりたいでしょう。あらゆる種類の振る舞いを持つオブジェクトのリストを返さず、.NET固有の型を返さないでください。例えば、DataSetDataTableは悪い考えです。プリミティブ型、プリミティブ型のリストと配列、これらの単純なクラスのリストと配列などのプロパティを持つ単純なクラスを使用してください。

関連する問題