asp.net-mvc - 关注点分离存储库模式和 Entity Framework 3.5

标签 asp.net-mvc entity-framework repository-pattern separation-of-concerns

我正在努力成为一个更好的开发者......

我正在使用的内容:

  • .Net MVC 框架 1.0
  • Entity Framework 3.5

  • 我一直在阅读,我想我想做的是:
  • 为域中的每个聚合创建一个存储库。例如,订单存储库将管理订单的 OrderItems。
  • 创建一个服务层来处理业务逻辑。每个存储库都会有一个具有相似方法的相应服务对象。
  • 在存储库和服务之间创建 DTO
  • 可能创建 ViewModels,它们是 View 使用的类。

  • 我有一个基本存储库接口(interface),我的聚合存储库接口(interface)将实现...
    public interface IRepository<T>
        {
            IEnumerable<T> ListAll();
            T GetById(int id);
            bool Add(T entity);
            bool Remove(T entity);
        }
    

    我的 Order Repository 接口(interface)定义如下……随着我对这个学习练习的深入了解,可能会有其他方法。
    public interface IOrderRepository : IRepository<Order>
    {
    }
    

    我的服务类与存储库的定义基本相同,只是每个服务实现都包含业务逻辑。这些服务将在构造函数中采用存储库接口(interface)(我还没有准备好在这个练习中使用 IoC,但相信这就是我想要结束的地方)。
  • 存储库实现将使用 Entity Framework 从数据库中推送和拉取。检索数据时;这些方法将只返回 DTO 而不是 EF 生成的对象
  • 服务(正如我所说的那样)将控制存储库并执行业务逻辑。这些服务就是您将在 Controller 中看到的,即 _orderService.GetById(1)。
  • 这是我开始翻转并可以使用一些反馈的地方......我应该让我的服务类填充 ViewModel 类......我应该没有 ViewModel 类......也许从一种类型到另一种类型的映射过多?

  • 我很想就我在关注点分离方面的前进方向得到一些反馈。

    谢谢

    最佳答案

    我认为您正朝着关于存储库模式的正确方向前进。关于您关于 ViewModel 类的问题,我建议您使用将业务服务方法输出的输出转换为某些所需输出的东西。例如,您的 Order 业务服务可能有一个名为 GetOrders() 的方法。 .使用自定义属性,您可以为其定义 View 类类型。 View 能够获取此方法的输出,可能将其与其他类型的数据连接起来,并将结果作为具有匿名类型的对象集合返回。在这种情况下, View 将采用 IQueryable<Order>IEnumerable<Order>作为输入并返回 IList作为输出。

    当您需要在客户端显示不同类型的数据 View 时,此方法将极大地帮助您。我们已经在我们公司的框架中使用了与此方法类似(但更复杂)的东西。

    关于asp.net-mvc - 关注点分离存储库模式和 Entity Framework 3.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780932/

    相关文章:

    c# - 如何使用 EF 和 WPF 显示和更新来自多个表的数据网格中的数据?

    c# - 内存库模式和单元测试

    c# - 如何在 MVC 中跟踪以前的 Urls

    javascript - 使用两个不同的 Controller 文件时,部分 View ng-click 不起作用

    c# - 可为空数据类型的 jQuery 验证

    c# - Entity Framework 和 DataContractSerializer

    database - 如何使用 EF 急切加载整个数据库

    c# - 用 Entity Framework 和 POCO 类替换遗留数据层的策略

    c# - 我如何使用存储库模式的预加载?

    c# - 检查网页是否在平板电脑上运行