MVC代码构建最佳实践问题

时间:2012-07-28 00:42:12

标签: c# asp.net-mvc agile

我试图改进我的代码结构,所以也许我可以得到关于如何处理主要服务的以下几点和问题的一些输入。

  1. 服务不应该依赖于表示层,因此通过构造函数和类似方法将httpcontext等内容传递给服务/服务函数是一种不好的做法,对吗?

  2. 是否有人没有相互引用的服务?它们应该只是像向下一样工作吗?例如存储库依赖?或者那被认为是好的?

  3. 服务是否仅包含与过滤和处理来自数据库/存储库的信息直接相关的功能,或者可以考虑例如专用于加密和生成随机字符串/密码的类或者类处理提供商信赖方功能一个服务呢?或者他们/一个人可能被认为是实用类?

  4. 是否有一种良好且可接受的方式来操纵服务中的会话,或者这应该传递给控制器​​并在那里处理?

1 个答案:

答案 0 :(得分:1)

  

服务不应该依赖于表示层,所以   将httpcontext等内容传递给服务/服务函数   通过contstructor和类似的做法是不好的,正确的

如果可以避免,请避免使用它。但这取决于,如果它是表示层的服务,那么它就可以了。

  

是否有人没有相互引用的服务?他们应该只   “向下”工作,例如存储库依赖性?或者就是这样   认为好吗?

如果可以避免,请避免使用它。它依赖于您的体系结构,例如,如果您在asp.net mvc中工作,那么您可以很好地避免这种情况,并保留在Controller级别编排多个服务的代码类型

  

服务是否仅包含与之直接相关的功能   过滤和处理来自数据库/存储库的信息   可以考虑一个专门用于加密的类   并生成随机字符串/密码或类处理提供程序   依赖党的功能也是一项服务?或者他们/一个人会   也许被认为是实用类?

您可以使用服务来过滤和处理来自数据库/存储库的信息,或者您也可以创建一个专用于加密并生成随机字符串/密码的服务。服务是课程,因此遵循Single Responsability Principle

非常重要
  

是否有一种良好且可接受的方式来操纵内部的会话   服务或这应该传递给控制器​​并在那里处理?

如果您的服务是无状态的,那么最好进行扩展,但如果您将不得不处理会话或其他生命周期的东西,并且您正在.net中构建Web系统,那么您最好的办法就是使用asp。 net mvc,与Unity集成,以便您获得Inversion Of Control,这样您就可以使用life time managers来处理会话