6

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

我正在使用的内容:

  1. .Net MVC 框架 1.0
  2. 实体框架 3.5

我一直在阅读,我想我想做的是:

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

我有一个基本存储库接口,我的聚合存储库接口将实现...

public interface IRepository<T>
    {
        IEnumerable<T> ListAll();
        T GetById(int id);
        bool Add(T entity);
        bool Remove(T entity);
    }

我的 Order Repository 接口定义如下……随着我对这个学习练习的深入了解,可能会有其他方法。

public interface IOrderRepository : IRepository<Order>
{
}

我的服务类与存储库的定义基本相同,只是每个服务实现都包含业务逻辑。这些服务将在构造函数中采用存储库接口(我还没有准备好在这个练习中使用 IoC,但相信这就是我想要结束的地方)。

  1. 存储库实现将使用实体框架从数据库中推送和拉取。检索数据时;这些方法将只返回 DTO 而不是 EF 生成的对象
  2. 服务(正如我所说的那样)将控制存储库并执行业务逻辑。这些服务就是您将在控制器中看到的,即_orderService.GetById(1)。
  3. 这是我开始翻转并可以使用一些反馈的地方......我应该让我的服务类填充 ViewModel 类......我应该没有 ViewModel 类......也许从一种类型到另一种类型的映射太多?

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

谢谢

4

1 回答 1

1

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

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

于 2009-11-23T03:29:46.053 回答