实体框架 – 对ASP.NET MVC Onion架构的意见
|
您对以下“通用”代码优先的Onion启发式ASP.NET MVC架构有何看法? 层次解释: 核心 – 包含域模型。例如这是商业对象及其关系。我正在使用实体框架来直观设计实体和它们之间的关系。它允许我为数据库生成一个脚本。我正在获得自动生成的类似POCO的模型,我可以在下一层(Persistence)中自由引用,因为它们很简单(即它们不是数据库特定的)。 持久性 – 存储库接口和实现。基本上CRUD操作在域模型上。 BusinessServices – 存储库周围的业务层。所有业务逻辑应该在这里(例如GetLargestTeam()等)。使用CRUD操作来组合返回对象或获取/过滤/存储数据。应包含所有业务规则和验证。 Web(或任何其他UI) – 在这种特殊情况下,它是一个MVC应用程序,但这个项目背后的想法是提供UI,由业务服务提供驱动。 UI项目消耗了业务层,不能直接访问存储库。 MVC项目有自己的View模型,它们是针对每个View的情况。我不是试图强迫它的域模型。 所以引用如下: 我喜欢什么 >我可以设计我的对象,而不是手动编码。我正进入(状态 混合的感觉: >好的,我们有一个可插入的存储库实现,但是你真的有多少同一个持久化接口的不同实现? 我不喜欢什么 >核心项目现在在其他所有项目中被引用 – 因为我需要访问域模型。在经典的洋葱架构中,核心仅由下一层引用。 作为一个最后的问题 – 什么是不是过度设计的好建筑(比如一个完整的洋葱,我们注射,服务定位器等),但同时提供一些合理的灵活性,在那里你会现实需要吗? 谢谢 解决方法哇,这里有很多话要说;-)首先,我们来谈谈整体架构。 我可以看到,这不是一个真正的洋葱建筑。你忘记了最外层,“依赖关系分辨率”层。在洋葱架构中,根据这一层将Core接口与基础架构实施(Persistence项目所在的位置)进行连接。 以下是您在洋葱应用程序中找到的内容的简要说明。核心层中的内容是业务所特有的:域模型,业务流程…此层将所有技术实现需求定义为接口(即存储库接口,日志记录接口,会话接口…)。核心层不能引用任何外部库,并且没有技术特定的代码。第二层是基础设施层。此层为非业务核心接口提供实现。这是您调用DB,您的Web服务的地方…您可以引用所需的任何外部库,以提供实现,根据需要部署尽可能多的nugget软件包:-)。第三层是你的UI,你知道要放在哪里;-)最新的层,这是我上面谈到的依赖关系。 层次之间的依赖关系朝向中心。 以下是它的外观: 现在的问题是:如何适应您在洋葱架构中已编码的内容。
是的,这是正确的地方!
那么你需要使用实现来分离接口。接口需要移动到Core中,实现需要移入Infrastructure文件夹(您可以调用此项目Persistence)。
这需要在Core中移动,但是您不应该在这里使用存储库实现,只需操作界面!
酷:-) 您将需要添加一个“Bootstrapper”项目,只需看看here,看看如何继续。 关于你的混合感觉: 我不会讨论有没有存储库的需要,你会在stackoverflow上找到很多答案。 在我的ViewModel项目中,我有一个名为“Builder”的文件夹。我的Builders可以与我的Business Services接口讨论,以获取数据。构建器将收到Core.Domain对象的列表,并将它们映射到正确的ViewModel中。 关于你不喜欢什么:
假的! :-)每个层都需要Core来访问在那里定义的所有接口。
再一次,一旦编辑与您的EDMX相关联的T4模板变得非常容易,这不是问题。您只需要更改生成的文件的路径,您可以在基础架构层中安装EDMX,并在Core.Domain项目中拥有POCO。 希望这可以帮助! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 用于ASP.NET MVC的Spark T4模板
- asp.net – ASP MVC授权所有操作除了几个
- asp.net-mvc – asp.net mvc未经授权的回复是空白页吗?
- asp.net-mvc-4 – 在MVC4环境中使用Razor和Angular.js
- 如何在asp.net webform中使用异步/等待实现异步页面?
- Asp.net web API日期时间格式
- asp.net-mvc – 将ASP.NET MVC应用程序部署到IIS7并保持干净
- asp.net – 更改Html.DisplayFor布尔复选框MVC
- asp.net-mvc-4 – MVC 4 – 从视图中的Controller -Show返回
- asp.net – 如何在mvc中使用自定义成员身份添加更多自定义字
- asp.net – 如何删除linq到sql?
- asp.net-mvc – 如何使用ASP.NET Web API的Ninje
- asp.net-core – ASP.NET Core中的System.Data.E
- asp.net – Signalr中哪个更好的WebSocket或Long
- asp.net-mvc – 如何在ASP.NET MVC4中使用具有唯
- asp.net-mvc – ASP.Net MVC2自定义模板通过Ajax
- asp.net-web-api – WebApi 2.1 PUT抛出错误415
- asp.net-mvc-3 – 货币格式化MVC
- asp.net – HttpContext的Cache和Items Properti
- 在ASP.NET MVC中获取服务器机器名称?
