代码之家  ›  专栏  ›  技术社区  ›  Kieran Senior

ASP.NET MVC-模型接口

  •  2
  • Kieran Senior  · 技术社区  · 16 年前

    好像我已经解决了所有的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. 考虑到我使用的是PhilHaack开发的一个区域lib,接口应该在哪里运行。现在,我已经在根级别创建了一个名为“data”的文件夹(从名称空间可以看到)。
    2. 我们的存储过程有虚假的名称,因为它们被合并到数据库中,如果我使用对象,我可以转而使用基于对象的解决方案来访问存储过程。我的数据访问库中的名称是否必须反映此实例中存储过程的名称?
    3. 使用这样的库可以让我 Accounts.GetContracts() 在我的控制器里。这是明智之举吗?
    4. 这种方法有什么设计建议吗?即命名方案。
    5. 实际的实现应该生活在哪里?在与接口相同的文件夹中?

    我们的想法是,如果我们抛弃了LINQ,那么我们可以使用不同的数据访问技术(实体框架、普通的ol'sql等)。我想听听更有经验的人的评论/批评/评价。

    2 回复  |  直到 9 年前
        1
  •  3
  •   Tomas Aschan    9 年前

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

        2
  •  1
  •   Marc Gravell    16 年前

    这个 IMultipleResults 对我来说就像拇指酸痛一样。它并没有向调用者准确地公布真正的返回类型。

    如果您想要真正的存储库抽象,您可以有一个单独的 Contract 键入与ORM工具无关的内容,并返回这些内容的数组/列表。一些框架(nhibernate,linq to sql,如果你足够努力的话,4.0中的ef)支持poco的使用,允许你通过orm工具使用简单的(非orm)对象。所以我的偏好是:

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

    接口数据类型的额外抽象会破坏一些数据绑定设置(例如,它不能创建新记录)。