【问题标题】:Which of those two entities implementations are better in ASP.net MVC这两个实体实现中哪一个在 ASP.net MVC 中更好
【发布时间】:2013-02-25 22:59:22
【问题描述】:

我是 ASP.net MVC 的初学者。并且比 WebForms 更喜欢它。

所以我决定开始一个包含大约 6 个表的项目:

  1. 图库
  2. 管理员
  3. 会话
  4. 会话图像
  5. 优惠
  6. 信息

我创建了两个项目:FP.WebUIFP.Domain

在我的域项目中,我创建了 3 个文件夹 AbstractConcreteEntities

在 Abstract 文件夹内有 6 个接口 IGalleryISessions.. 等。每个接口都有这样的内容:

namespace FP.Domain.Abstract
{
    public interface IGallery
    {
        IQueryable<Gallery> Gallery { get; }

    }
}

Concrete 文件夹内还有另外 7 个类:EFDbGalleryEFDbSessions... 和 EFDbContext,它们继承自 DbContext 类。

上面的每个类(EFDbContext除外),都实现了各自对应的接口。

现在当我想到它时,我发现我可以创建一个接口来定义所有实体,并且在Concrete 文件夹中只有一个类来实现该接口。


我真的不知道什么更好:

6 个接口,每个实体6 个类

1 个接口1 个类,返回所有实体。

【问题讨论】:

    标签: c# asp.net sql asp.net-mvc entity-framework


    【解决方案1】:

    您似乎偶然发现了存储库模式。典型的架构决策是创建一个接口

    interface IRepository
    {
        IQueryable<Gallery> Query { get; }
    }
    

    然后让您的 ORM 类实现存储库接口。

    class MyDbContext : DbContext , IRepository
    {
    
    }
    

    现在,要回答您的问题,我应该使用 6 个类和 6 个接口还是 1 个类和 1 个接口,答案绝对是 NO!

    典型的模式调用一个 GENERIC 接口(所以实际上你有 6 个接口,但只有一个接口源,如果你需要额外的调用,你可以扩展泛型)。

    //Actually this implementation is edging on 
    //Unit Of Work
    interface IRepository<T>  
    {
        IQueryable<T> Query { get; }
        void Insert(T item);
        void SaveChanges();
    }
    

    然后您的 EfContext 会公开所有接口。原因是您的控制器通常只需要一个接口即可工作,这使得在您的控制器上进行模拟/伪造测试要容易得多(您不需要创建未使用方法的实现,例如 GalleryControllerTest 的 InfoQuery)。

    如果您发现任何接口都需要特定领域的代码,您可以扩展 IRepository 接口。

    interface IGalleryRepository : IRepository<Gallery>  
    {
        void SomeSpecialOperation(Gallery item);
    }
    

    最后,如果/当您开始引入控制反转时,这种模式的实施将使生活变得更加轻松。

    PS 我通常将 ACTUAL EF 代码(即具体的存储库)重构为单独的程序集,以防您决定从项目中删除 EF。

    【讨论】:

      【解决方案2】:

      我会使用 7 个类,因为它们的职责不同。

      .

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        • 2017-09-29
        • 1970-01-01
        相关资源
        最近更新 更多