代码之家  ›  专栏  ›  技术社区  ›  John Polling

服务层和存储库

  •  45
  • John Polling  · 技术社区  · 17 年前

    我已经读了一些书,我看到人们通过拥有一个我喜欢的服务层来保持他们的控制器和模型的精简。

    1. 如果不需要对数据进行任何操作,并且不需要涉及服务层,那么控制器可以直接调用存储库
    2. 一旦需要对数据(业务逻辑)做任何工作,那么这应该在服务层中完成,控制器将在需要时对服务层进行简单调用
    3. 理想情况下,模型应保持精简,理想情况下,仅作为DTO
    4. 数据验证将在模型内完成(使用单轨验证属性)。我欣赏甚至没有人喜欢用很多属性污染他们的模型,但这是一个不同的讨论。我喜欢MonoRail的验证属性对于UI中的自动jQuery验证的好处。

    我试图将我所有的代码都转换为单一责任原则,因此尝试整理我的编码实践。

    3 回复  |  直到 9 年前
        1
  •  26
  •   gcores    17 年前

    首先,没有一套规则在任何情况下都适用。如何为应用程序建模在很大程度上取决于项目的类型和复杂性。话虽如此,以下是一些想法:

    1. 该服务负责(某些)业务逻辑,并使用其他服务来完成。存储库是一种服务,从服务调用它没有什么错。
    2. 应该 包含业务逻辑,实际上您应该始终尝试首先将其放在模型中。如果您需要外部数据来执行该业务逻辑(来自另一个模型或存储库),那么您应该创建一个服务。
    3. 模型中的验证没有问题。使用属性与否是一个品味的问题(如果你喜欢,那就好了)。如果验证过于复杂,则将其移出模型(创建一组外部规则)。

    最重要的是,做感觉正确的事情(这通常是正确的答案)。

        2
  •  7
  •   Mandeep Janjua    13 年前
        3
  •  6
  •   BigJump    17 年前

    伊恩·库珀刚刚写了一篇名为 The Fat Controller 就这个问题。

    推荐文章