【问题标题】:When does having a service layer make no sense?什么时候拥有服务层没有意义?
【发布时间】:2015-12-14 20:50:40
【问题描述】:

将所有业务逻辑集中在一个地方会带来各种好处。它使您的逻辑清晰且易于调试。但是,我觉得它在某些情况下不能很好地扩展。

例如,

class Book{
    String a, b......z;
}

我的图书课有 26 个字段(a 到 z)。对于单独的搜索,有 2^26 种可能的查询方式。

如果我要为此编写一个服务类(存储库):

interface BookRepo{
     List<Book> findById(int id);
     List<Book> findByA(String a);
     List<Book> findTop10ByADescending(String a);
     List<Book> findByBAndCAndDAnd....Z(String a, b, c,d, e....z);
     ....
}

如您所见,这很荒谬,因为搜索变量的组合可能有很多,更不用说可能出现的排序和分页变量了。

如果我的应用程序非常灵活,以至于对于给定的“资源”,用户可以过滤任何字段,按任何内容排序。我不应该完全跳过服务层吗?

我尝试过编写“通用”服务层,这在静态类型语言中并不容易。此外,如果您的服务层现在允许所有内容通过,那么将其放在那里毫无意义。

【问题讨论】:

    标签: web-services model-view-controller architecture


    【解决方案1】:

    您的问题与现有服务层与缺少服务层无关。您的问题是由错误的数据结构和/或存储库设计引起的。

    如果您想按 26 个字母的所有可能组合进行过滤,请考虑动态创建查询和/或在字母和书籍之间建立多对多关系,而不是在一本书中包含 26 个字段。那么您将拥有恒定且少量的存储库方法,并且您可以轻松添加新字母。

    如果您的应用程序不需要服务层,那么您不必添加它。但是,如果您没有它并且您的应用程序不断增长,则很难发现需要它的时刻。相反,人们倾向于将服务逻辑放入控制器和/或存储库中。尤其是当你在一个团队中工作时

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2018-02-23
      • 2017-07-16
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多