Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC企业DDD体系结构和WCF层_Asp.net Mvc_Domain Driven Design_Enterprise Architect - Fatal编程技术网

Asp.net mvc ASP.NET MVC企业DDD体系结构和WCF层

Asp.net mvc ASP.NET MVC企业DDD体系结构和WCF层,asp.net-mvc,domain-driven-design,enterprise-architect,Asp.net Mvc,Domain Driven Design,Enterprise Architect,我已经使用域驱动设计设计了我的ASP.NET MVC应用程序,我得到了以下项目: 核心应用程序-核心应用程序,包含域模型等 MyApp.Infrastructure——应用程序的主要基础设施,包含使用EF存储域模型(repos等)的实现 MyApp.Web.Core-域模型、服务声明(接口)等仅适用于Web(例如iFormAuthenticationTicketApplication、IOAuthAuthenticationProvider等) MyApp.Web.Infrastructure

我已经使用域驱动设计设计了我的ASP.NET MVC应用程序,我得到了以下项目:

  • 核心应用程序-核心应用程序,包含域模型等
  • MyApp.Infrastructure——应用程序的主要基础设施,包含使用EF存储域模型(repos等)的实现
  • MyApp.Web.Core-域模型、服务声明(接口)等仅适用于Web(例如iFormAuthenticationTicketApplication、IOAuthAuthenticationProvider等)
  • MyApp.Web.Infrastructure-Web实现
  • MyApp.Web.UI-ASP.NET MVC标准应用程序
该应用程序应该由具有多个服务器等的企业使用。目前,该应用程序在控制器的基础结构层调用一个服务,该服务使用存储库和EF。我可以使用连接字符串连接到DB服务器

当我在谷歌深入了解这个话题时,我读到了一些在创建企业应用程序时采用的方法是创建应用程序服务器和Web服务器。在应用服务器中—存储WCF服务,在web服务器中仅调用它

我想知道我是否应该这样做(如果创建WCF服务是与企业打交道时正确且必需的方法): -为什么有些人不应该只使用控制器中的服务,而应该使用API? -如果我使用的是API,它不会减慢响应速度吗?因为即使计算机在同一个网络上,我仍然会打开一个HTTP请求。 -我应该使用WCF还是ASP.NET WebAPI


感谢您的反馈和帮助

首先,关于您的项目,是否需要拆分MyApp.Web.Core、MyApp.Web.Infrastructure和MyApp.Web.UI?当然,它们可能是独立的职责,但有时依赖性卫生胜过封装。您可以始终将它们保留在单独的文件夹和名称空间中。我不会将某些内容提取到单独的项目中,除非我需要从其他地方将其作为库引用


至于应用程序服务,这也取决于您的需要。如果唯一可以调用该应用程序服务的地方是ASP.NET MVC应用程序,那么就不需要提取应用程序服务。但也有一些好处。一个是,您不必担心服务所需的所有依赖关系——您只需通过Url引用它。当然,您可以从控制器以外的地方调用服务,尽管MVC控制器也可以充当纯HTTP服务。您还可以在不发布MVC应用程序的情况下将更新部署到特定服务。但您确实有维护单独服务的负担。如果你真的这样做了,那就使用WebAPI吧,WCF太抽象了。

谢谢你的评论。关于分离-我不得不提到它,我这样做是因为我希望在未来将这个项目用于Windows8应用程序、WP、iOS(Mono)、Android(Mono)等。所以我认为这将是一个很好的方法。由于这些应用程序,我确实认为我将来需要使用WebAPI或WCF(在这种情况下,我将为iOS、Android等开发应用程序。你仍然推荐WCF吗?)。WebAPI或WCF的使用是否会降低性能(假设服务位于同一网络上)?对于HTTP服务,我建议WebAPI优于WCF。与WebAPI相比,HTTP的WCF是非常有限和不自然的。进程跳跃总是会降低性能,但这不应该是个问题。实际上,您可以让HTML客户端直接调用WebAPI服务来完成某些事情。谢谢-所以我将选择WebAPI。最后一个子问题:您认为在标准Web应用程序控制器和WebAPI上使用该服务可以吗?因此,web应用程序不会因为HTTP请求而减慢速度,但所有其他应用程序(iOS、Android、AJAX调用)都将使用WebAPI?您可以这样做,但您必须注意版本控制。另外,正如我在文章中所说的,特别是如果API很小,您可以通过返回JSON而不是HTML,让MVC充当WebAPI。