我正在使用分布式Web应用程序,其中包含SQL Server 2005数据库的数据库服务器,我们安装了Microsoft三层服务应用程序的应用程序服务器,以及使用MVP和监督控制器的Web服务器。
我请求服务器上的服务层,当我请求列表中的国家/地区时,会返回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 to SQL)上使用LINQ。
我提出了这个解决方案:在服务层,我总是返回一个List,如下所示:
public virtual List<T> GetList()
{
List<T> list = new List<T>();
list.AddRange(this.dataAccess.GetList()));
return list;
}
但是我在这里向控制器返回一个完整的列表,也许我只需要列表中的一些项目。我的第二个问题是,这是一个好的设计吗?
期待您的建议!
答案 0 :(得分:0)
我没有看到设计有任何特殊问题。
当然,您需要注意T
中List<T>
的内容。不要返回具有各种行为的对象列表,也不要返回特定于.NET的类型 - 例如,DataSet
和DataTable
是个坏主意。使用具有基本类型属性的简单类,基元类型的列表和数组,这些简单类的列表和数组等。