ASP.NET MVC - 模型接口

时间:2009-06-23 09:30:57

标签: c# asp.net-mvc linq interface

好像我现在已经解决了所有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);
  }
}

我有一些关于如何运作的问题。

  1. 界面应该在哪里,考虑到我正在使用Phil Haack开发的区域lib。现在我已经在根级别创建了一个名为“Data”的文件夹(正如您从命名空间中看到的那样)。
  2. 我们的存储过程有虚假名称,因为它们被汇集到数据库中,如果我使用的是对象,我可以转而使用基于对象的解决方案来访问sprocs。我的数据访问库中的名称是否必须反映此实例中存储过程的名称?
  3. 使用这样的库可以让我在控制器中执行Accounts.GetContracts()。这是明智的吗?
  4. 这种方法有任何设计建议吗?即命名方案。
  5. 实际实施应该在哪里?在与界面相同的文件夹中?
  6. 我们的想法是,如果我们抛弃LINQ,那么我们可以使用不同的数据访问技术(实体框架,简单的'SQL等)。我很想听听那些经验丰富的人的评论/批评/评价。

2 个答案:

答案 0 :(得分:3)

您的方法看起来很像存储库模式,受到许多ASP.NET MVC教程编写者的称赞... =)这里有一个tutorial,它描述了如何使现有应用程序松散耦合,以及其中一件事(其中包括它显示了如何在ASP.NET MVC中实现存储库模式。

答案 1 :(得分:1)

IMultipleResults像拇指一样伸出来。它并没有准确地将真实的返回类型通告给调用者。

如果您想要真正的存储库抽象,您可以使用与ORM工具无关的单独Contract类型,并返回这些类型的数组/列表。一些框架(如果你努力工作,NHibernate,LINQ-to-SQL,4.0中的EF)支持POCO使用,允许你通过ORM工具使用你的简单(非ORM)对象。所以我的偏好是:

  • 基于接口的存储库,返回......
  • 的数组/列表等
  • ...具体的POCO类型

接口数据类型的额外抽象会对某些数据绑定设置造成严重破坏(例如,它无法创建新记录)。