当前位置:  开发笔记 > 编程语言 > 正文

服务层和存储库

如何解决《服务层和存储库》经验,为你挑选了3个好方法。

我现在一直在使用MVC框架,我真的很喜欢这些问题是如何被分离出来的.我养成了让控制器完成相当多工作的坏习惯.所以我真的在寻找一些建议.

当我第一次开始使用MVC时,我常常让控制器在数据库工作完成后对模型进行操作.我知道这很糟糕所以将这项工作转移到模型中.但是我对此并不满意,因为我希望我的模型能够很好地学习.

我已经做了一些阅读,我看到人们通过提供服务层来保持他们的控制器和模型,我喜欢它的外观.

我只是想了解服务层和存储库应该如何协同工作.以下是我的假设,如果这是一种好的工作方式,请你告诉我吗?

    如果不需要对数据进行操作,则控制器可以直接调用存储库,因此服务层不需要涉及

    一旦需要对数据(业务逻辑)进行任何工作,那么这应该在服务层完成,并且控制器将在需要时对服务层进行简单调用.

    一旦服务完成了它的业务逻辑,它就会根据需要使用存储库(如果需要保留数据).

    理想情况下,模型应该保持精益,理想情况下,行动只不过是DTO

    数据验证将在模型中完成(使用MonoRail验证属性).我很感激甚至没有人喜欢用很多属性污染他们的模型,但这是一个不同的讨论.我喜欢MonoRail的验证属性,可以在UI中自动进行jQuery验证.

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

谢谢



1> gcores..:

首先,没有一套规则适用于所有情况.您如何建模您的应用程序在很大程度上取决于项目的类型和复杂性.话虽如此,这里有一些想法:

    从控制器调用存储库没有错.只需确保控制器不包含业务逻辑.

    该服务负责(某些)业务逻辑并使用其他服务来执行此操作.存储库是一种服务,从服务中调用它没有任何问题.

    该模型包含业务逻辑,实际上您应该首先尝试将其放入模型中.如果您需要外部数据来执行该业务逻辑(从另一个模型或从存储库),那么您应该创建一个服务.

    模型中的验证没有错.使用或不使用属性是一个品味的问题(如果你喜欢它,那么它是好的).如果模型过于复杂,则将验证移到模型外部(创建一组外部规则).

最重要的是,做正确的事(通常是正确的答案).


我同意你的意见,我只是觉得应该将过多的业务逻辑存储在一个单独的服务层中.尽量使您的模型,视图和控制器尽可能小

2> Mandeep Janj..:

该视频深入介绍了如何组织asp.net MVC解决方案以及解决问题分离和更好的可测试性.希望它也能帮助别人.我从中学到了一些好东西.


确实是一个非常有用的视频。随附的源代码也可以在这里找到:https://bitbucket.org/ardalis/guestbook/src

3> BigJump..:

Ian Cooper刚刚在这个主题上写了一篇名为The Fat Controller的博客文章.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有