Asp.net mvc MVC4-在数据层中使用WCF
在我的测试项目中,我创建了一个WCF服务并使其运行。 接下来,我创建了一个MVC4项目。它在一种溶液下被分解成几层Asp.net mvc MVC4-在数据层中使用WCF,asp.net-mvc,wcf,dependency-injection,data-layers,Asp.net Mvc,Wcf,Dependency Injection,Data Layers,在我的测试项目中,我创建了一个WCF服务并使其运行。 接下来,我创建了一个MVC4项目。它在一种溶液下被分解成几层 模型层 UI/视图/控制器层 存储库层 要进行快速测试,请执行以下操作: 在UI层,我向WCF服务添加了一个web引用。在控制器中,我通过“使用”在视图中填充下拉列表来联系WCF服务 然而,我正在用依赖注入驱动分离 在存储库层,我创建了一个带有“填充”下拉列表的接口,并将其注入。没问题 我正在与这个概念作斗争的是: 我是否在UI层中使用WCF服务,并在存储库层中引用它?(似乎不
- 模型层
- UI/视图/控制器层
- 存储库层
因此,我正在努力理解这一部分……还有什么我应该进一步阅读的吗?我觉得您将WCF调用视为一个数据源,这使它自然适合存储库层。存储库的工作是从其他层抽象数据源实现的知识
我建议不要使用.NET项目强制执行层边界,而是使用同一项目中的文件夹强制执行逻辑分离,而不是物理分离。大多数用例不需要物理分离,它增加了复杂性,比如您提到的更困难的配置。意识到蛋糕可以用多种方式切割,我在这里向您介绍我对如何切割蛋糕的看法: 问题#1:“我是否在UI层使用WCF服务并在存储库层引用它?” 第一步:正如史提芬在你的评论中所指出的,如果你想注入一个第三服务器层,你应该仔细考虑一下。用户界面层可以重命名为“托管在IIS中的层”。这样做使它成为MVC表示层的主机层和服务的主机层。 但是,这并不意味着您的服务是在这一层中实现的,只意味着它们是在这里托管的(这只是在web.config中引用接口和实现名称空间的问题) 问题#2:“我是否创建另一个项目-数据层-并向WCF服务添加web引用,然后从存储库创建对数据层的引用?” 当我读到这篇文章时,您同时提出了多个问题:是的,您应该创建一个单独的层来封装存储库。不,您不应该让该层包含任何与wcf相关的内容。如果服务器层需要客户端访问wcf服务,则应将其划分为一个逻辑层,可以作为businesslogic层中的文件夹,也可以作为单独的物理“数据适配器层”。永远不要在您的存储库层中。虽然wcf数据适配器层在概念上与存储库层处于同一级别,但不应在同一逻辑或物理层中混合使用数据库访问和服务访问 第三个问题我只能回答为一个问题:您希望WCF在您的体系结构中充分发挥作用的目的是什么?您是想注入一个独立的服务层,还是混淆了层分离和层分离 层分离可以在进程中的运行时耦合,而层分离只能通过某种网络远程处理(如wcf)在运行时耦合 正如Steven在评论中指出的,您根本没有真正记录在体系结构中使用wcf的必要性 让我们从逻辑层和层的角度来看您的体系结构(切块):
- 客户端访问层(#1,在浏览器上下文中运行)
- Web主机层(#2,代表外部服务器层,包含所有MVC代码。可能模型存在于它自己的物理层中
- 服务层(在您的体系结构中还不存在,因为没有必要将层进一步抽象为层)
- 业务层(#2,表示位于表示层、数据库和数据访问层之间的业务逻辑)
- 存储库层(#2,封装数据库访问逻辑和映射)
- 服务访问层(#2,封装对外部服务的访问,可以在BL层或单独的物理层中实现为文件夹)
- 数据库层(#3,sql server)
- 逻辑层-用于隔离责任的架构概念。层具有向下耦合,而不是向上耦合
- 物理层-用于强制逻辑分离的实现构造。可以将.net程序集用作物理层的实现
- 层-可以存在于不承载其他层的计算机上的一个或多个层