2009-06-23 92 views
2

看来我现在已经解决了我所有的LINQ问题,但我并没有在开发一个实际的模型。事情是这样的,我不想希望被绑在一个单一的技术,我想有自由实施不同的数据访问技术,并工作到一个单一的接口。ASP.NET MVC模型接口

现在,我从来没有这样做过,但基于我的面向对象的知识和经验,我想出类似如下的想法:

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开发的区域库。现在我已经在根级创建了一个名为“Data”的文件夹(如您从名称空间中看到的那样)。
  2. 我们的存储过程具有虚假名称,因为它们被集中到一个数据库中,如果我正在使用对象,我可以转而使用基于对象的解决方案来访问sprocs。在我的数据访问库中的名称是否必须反映这种情况下的存储过程?
  3. 使用这样的库将允许我在我的控制器中执行Accounts.GetContracts()。这是明智的吗?
  4. 这种方法是否有任何设计建议?即命名方案。
  5. 实际实施应该在哪里生活?在与界面相同的文件夹中?

想法是,如果我们曾经沟通过LINQ,那么我们可以使用不同的数据访问技术(实体框架,普通SQL等)。我很乐意听到那些更有经验的人的评论/批评/评价。

+2

有关信息,您可能会发现“int?”一个更快的方式说“System.Nullable ”... – 2009-06-23 09:34:59

+0

干杯马克,我曾经想过这个,因为我看到两个都在使用。我更喜欢System.Nullable ,因为我可以清楚地看到它是可空的。我常常浏览一下“?”做法。 – Kezzer 2009-06-23 09:36:04

回答

3

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

1

IMultipleResults对我来说就像一个拇指疼痛。它并不完全公布真正的返回类型给调用者。

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

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

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

+0

至于你的第一句话Marc,你完全正确,我不知道为什么我这样做是对你诚实的,因为我正在使用数据类型来表示多个结果集。我只是编辑我的帖子来反映这一点。 – Kezzer 2009-06-23 09:40:26