我们在一个MVC解决方案中有两个WebApplication,一个用于Desktop,另一个用于Mobile版本。
架构如下所示:
我在此项目中添加了一个服务层http://www.asp.net/mvc/tutorials/validating-with-a-service-layer-cs)。
只要这两个Web项目具有不同的控制器但最常见的逻辑,以下哪个我可以移动到服务层。
提前致谢。
答案 0 :(得分:3)
查看模型验证
如果没有特别的理由使用服务层模型验证,我建议您使用模型库中的数据注释进行模型验证。您所要做的就是为实体的属性添加一些属性,开箱即用,包括验证消息(如果您使用Html.ValidationMessageFor()
或类似的方法添加验证元素)在客户端视图中。
HTML帮助程序类
HTML Helper类应该是Common UI库的一部分,如果它们应该被共享的话。它们不属于任何现有层,因为它们都是独立的表示层(Web应用程序)。我想你的HTML帮助器将依赖于表示层,因此单独的库就足够了。
常用功能
根据您需要使用常用功能的位置,它们也可以是模型库或服务层的一部分。
以下内容是作为图层编写的。它们当然是整个解决方案中的独立项目,因此它们成为独立的组件。
对象图层 - 包含所有常用类/枚举/接口,任何图层使用的常规功能和应用程序模型POCO;这就是为什么它被所有其他层引用
数据层 - 具有数据访问对象(也可以从“对象”层中的POCO继承),这些对象仅在此层中使用,并执行与应用程序层POCO之间的映射;此层中还有存储库,因此该层/程序集由下一层(服务)引用
服务层 - 包含业务逻辑和操作应用程序模型类;从表示层获取数据并使用数据层来操作后备存储中的数据(无论它在哪里 - 这当然是与商店通信的数据层存储库的一部分)
表示层 - 可能是网络应用程序或其他任何内容;引用对象和服务层,以便它能够进行通信;此处也创建了任何只是表示层的对象(视图需要特殊视图模型,但服务不需要);
所有这些意味着我的Objects层通过提供用于在层之间交换数据的公共类来提供层之间的通信方式。
如果我需要实现某些其他提供程序,则它们可能是单独层的一部分,但上层分层适用于所有应用程序的90%。一个很好的例子是一些可以在不同应用程序中重用的公共库。根据库提供的内容,它将被需要其功能的那些层/程序集引用。
在你有两个Web应用程序的情况下,我会创建一个名为 Presentation 的特殊层,其中包含所有常见的HTML功能,然后在两个Web应用程序中引用它。