据我了解,MVC通过“胶水”,也就是控制器分离开来呈现(视图)的类定义(模型)。 控制器应该有一个责任,因此是可测试的。 的ViewModels被用于从多个实体汇集数据,并以“按摩”从控制器视图的数据。
这似乎是商业逻辑并没有真正有一个地方......所以我想对服务的另一层将是合适的。 我只是不知道在什么地方这一层,或如何构建的服务 - 它应该是一个名为“服务”类,它包含了一堆的功能是什么? 我是一个有点新的MVC,所以提示的任何阅读材料,样品或一般的新人那种将是真棒。
据我了解,MVC通过“胶水”,也就是控制器分离开来呈现(视图)的类定义(模型)。 控制器应该有一个责任,因此是可测试的。 的ViewModels被用于从多个实体汇集数据,并以“按摩”从控制器视图的数据。
这似乎是商业逻辑并没有真正有一个地方......所以我想对服务的另一层将是合适的。 我只是不知道在什么地方这一层,或如何构建的服务 - 它应该是一个名为“服务”类,它包含了一堆的功能是什么? 我是一个有点新的MVC,所以提示的任何阅读材料,样品或一般的新人那种将是真棒。
我开发ASP.NET MVC应用程序时,通常使用一个服务层。 它类似于服务层图案 ,马丁·福勒讨论了在企业应用架构模式 。 它封装了业务逻辑,使控制器非常薄。 基本上,控制器使用该服务层来获得域模型接着被转化成图的模型。 我也用作业设计模式的单位来处理事务及库设计模式来封装,方便单元测试数据访问层,并能轻松更换ORM的。 这一数字表明,我在MVC应用程序中使用典型的层。
服务层标记为这个图,因为我觉得人眼花缭乱,当你使用“服务层”中的“应用程序或领域层”。 他们往往认为这是一个Web服务。 它实际上是可以通过自己喜欢的网络服务技术,可以使用如的ASP.NET Web API或WCF,以及控制器组件。
至于命名约定,我通常使用的东西描述了域名,后服务。 举例来说,如果我有一个处理用户会员服务层,然后我将有一个名为MembershipService类具有所有的控制器和和Web服务进行查询和操作的会员域所需要的方法。 注意:您可以在同一个应用程序的多个领域,所以你可以有多个服务层。 我的观点是在这里,你不必有一个整体的服务,它的整个应用程序的服务。
我的建议是创建一个单独的类名为“服务”。 把它们放在不同的类库(或命名空间)项目并使其独立于MVC框架的基础设施。 我建议也使用某种依赖注入的(最好是构造器注入)。 那么你的服务类可能是这样的:
public class MyService : IMyService
{
IFirstDependency _firstService;
ISecondDependency _secondService;
public MyService(IFirstDependency firstService, ISecondDependency secondService)
{
}
public Result DoStuf(InputDTO)
{
// some important logic
}
}
然后你消耗来自controller这些服务。 看看这里为完整的例子。
据资料库 - 我的建议是,如果你要使用一些现代的ORM(NHibernate的,的EntityFramework),因为你的业务逻辑将在服务层中进行封装和数据库将与ORM框架已经被封装到不使用它们。
看看在文章从MSDN最佳实践。
在文章的应用程序的源代码可以找到这里 。
从报价“业务逻辑应该是一种服务,而不是一个模式”? :
在MVP / MVC / MVVM / MV *架构,就根本不存在的服务。 或者,如果他们这样做,这个词用来指可被注入到一个控制器或视图模型中的任何通用对象。 业务逻辑是在模型中。 如果你想创建“服务对象”来编排复杂的操作,这被视为一个实现细节。 很多人,可悲的是,实现MVC这样,但它被认为是一个反模式(贫血的域模型),因为模型本身并没有什么,它只是一堆的UI特性。
有些人误以为服用100线控制器的方法,这一切搡到服务莫名其妙地使一个更好的架构。 但事实并非如此; 它是所有再添,间接的可能是不必要的层。 实事求是地讲,控制器仍然做的工作,它只是这样通过一个名为不善“帮手”的对象。 我强烈建议吉米博加德的邪恶领域模型演示了如何把一个贫血的领域模型成有用的一个明显的例子。 它涉及到你暴露和操作是在商业环境中实际有效的模型仔细检查。
听起来像是你会像一个仓库模式之后。 你可以在这里读到它:
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net- MVC应用程序
这里这个答案也可以帮助:
最佳库模式的ASP.NET MVC