编程设计架构问:

时间:2014-12-10 16:00:52

标签: architecture

我正在构建一个WebAPI。在该WebAPI中,我使用DI(IoC)具有以下结构:

Controllers -> Services -> Repositorys  -> EF : DB.

现在,当请求可以使用多个服务时,最佳做法是:

Controller -> ServiceOne/ServiceTwo -> Repositories

ServiceTwo在ServiceOne的构造函数(或)ServiceTwo和ServiceOne中实例化,或者在Controller构造函数中实例化。

我正在努力实现对问题的分离并坚持这种实施。我也在努力完成良好的代码组织和更少的代码重复。

思想?

1 个答案:

答案 0 :(得分:1)

除了评论之外,我还将其作为答案发布,因为它超过了长度。

我说注入serviceTwo进入serviceOne将是一个很好的方法,因为控制器不需要处理很多,如果他们决定使用哪种服务。让服务层跟进其他服务并整合数据并将其返回给控制器。

如果您在服务中注入了服务

优点:

  1. 服务层往往在每个上都有交易 方法,如果你正在处理很多不同的调用 服务然后他们都进行了一次大交易。
  2. Controller只是将请求委托给发生所有业务逻辑的服务,您可以确保关注点分离。
  3. 如果可能,我们可以在几种不同的组合中重复使用这些服务。
  4. 错误处理会变得更容易
  5. 控制器可以更专注于返回的方式和数据类型等,
  6. 缺点:

    1. 如果使用spring transactionals
    2. ,则无法在事务中创建子事务

      如果您已将服务注入控制器

      优点:

      1. 您可以为每项服务创建新交易。 Ofcoz这个 service无法创建子事务边界。
      2. 缺点:

        1. 如果您在控制器内有很多服务,那么每个 服务调用作为不同的事务处理,因此,如果一个失败 其他服务调用不会回滚。
        2. 控制器是为了完成任务而杵/合并多个服务的控制器。
        3. 将减少可重用性