好像我现在已经解决了所有LINQ问题,我不打算开发一个实际的模型。问题在于我不想要与单一技术捆绑在一起,我希望能够自由地实现不同的数据访问技术并且可以工作到单个界面。
现在,我以前从未这样做过,但根据我的OOP知识和经验,我想出了如下想法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
namespace Intranet.Data.Accounts
{
interface IContractsControl
{
ContractsControlViewData GetContracts(System.Nullable<int> contractTypeID,
System.Nullable<int> responsibilityID,
string expenseType,
System.Nullable<int> supplierID,
string businessID);
ContractsControlViewData GetContract(int contractID);
}
}
我有一些关于如何运作的问题。
Accounts.GetContracts()
。这是明智的吗?我们的想法是,如果我们抛弃LINQ,那么我们可以使用不同的数据访问技术(实体框架,简单的'SQL等)。我很想听听那些经验丰富的人的评论/批评/评价。
答案 0 :(得分:3)
您的方法看起来很像存储库模式,受到许多ASP.NET MVC教程编写者的称赞... =)这里有一个tutorial,它描述了如何使现有应用程序松散耦合,以及其中一件事(其中包括它显示了如何在ASP.NET MVC中实现存储库模式。
答案 1 :(得分:1)
我IMultipleResults
像拇指一样伸出来。它并没有准确地将真实的返回类型通告给调用者。
如果您想要真正的存储库抽象,您可以使用与ORM工具无关的单独Contract
类型,并返回这些类型的数组/列表。一些框架(如果你努力工作,NHibernate,LINQ-to-SQL,4.0中的EF)支持POCO使用,允许你通过ORM工具使用你的简单(非ORM)对象。所以我的偏好是:
接口数据类型的额外抽象会对某些数据绑定设置造成严重破坏(例如,它无法创建新记录)。