asp.net-mvc – 这叫什么类型的架构?
对于我目前正在开发的Web应用程序(ASP.NET MVC),我们有以下架构:
>数据访问层:用于将数据持久保存到任意数据库的逻辑 本质上,我使用模型并将其拆分为DAL,服务层和域。我觉得填充模型中的所有逻辑使我的代码过于复杂。此外,我觉得它让我干净利落地表达我的业务逻辑,而不会让控制器做太多工作。 我的问题是:这种类型的架构叫什么? 作为第二个问题:这种类型的架构是否有意义?如果没有,我做错了什么? 解决方法
你是关于DDD的正确的轨道,取决于领域和领域的薄/厚度。服务层是。 DDD表示应该将知识(即业务逻辑)压缩到域模型中。将数据访问问题转移到DAL与DDD一致,但我认为将业务逻辑移到服务层中则不然。如果您有一个瘦的“数据模型”层(主要用于实体)和一个厚的服务层(主要用于“业务逻辑”),则可能有一个
anemic domain。
此外,DDD技术上没有“服务层”。可能存在“应用层”,但它应该很薄,并且只负责应用程序流/管理域类的生命周期。这基本上是Controllers在.NET MVC中所做的事情,在web http的上下文中管理应用程序流。 如果填充模型中的所有逻辑使得代码过于复杂,我会有兴趣听到“过于复杂”的含义示例。您可以正确地为复杂域建模,或者您可能已经使用DDD模式来解决复杂问题。我会说,正如你在问题中列出的那样,拱门不是DDD。我只是称之为“分层架构”,但那是因为我更喜欢在谈论物理拱时使用术语“层”。但是,您的逻辑体系结构是分层的。 我真的很喜欢Darin在他的回答中与Onion arch相关联。我正在成为它的忠实粉丝,我发现它根本不属于DDD。如果您的代码使用依赖注入来解决与运行时实现的接口依赖关系,那么您可能有一种洋葱拱形式。例如,您是否在DAL中定义了任何接口?这些接口的实现是否在运行时解决? 这是我开始在我的新项目中使用的拱的示例。它是洋葱DDD的组合: > API项目/程序集:所有其他层使用的通用接口,枚举,类和扩展方法。不必与Domain分开,但可以。 我在最核心放置了一个API层,但您可以将API和Domain项目合并为一个。无论哪种方式,洋葱的大肉部分是域,它有内部分层。例如,服务可能依赖于工厂,工厂依赖于依赖于实体的存储库。 Impl项目就是您在巴勒莫图中看到的“基础设施”洋葱皮。它与UI一起位于外边缘,并且不包含特定于域的知识。它知道如何使用EF发送电子邮件,存储/检索数据等。如果需要,您可以拥有多于1个 – 例如1个Impl用于数据访问,1个Impl用于处理邮件等。 MVC具有控制器和视图,并专注于UI和Web应用程序流。任何需要特定领域知识的东西都会被委托给域,而域类是构造函数注入控制器的。这意味着域类中的任何构造函数注入的接口都由IoC容器自动解析。 最后需要注意的是,针对API和Domain类中定义的接口进行编程意味着您可以单独测试域项目与MVC项目。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp-classic – 多个错误如果那么,否则如果
- (18)ASP.NET Core 基于现有数据库创建EF模型(反向工程)
- asp.net-mvc-4 – 为一个页面使用两个Knockout视图模型
- asp.net – 为什么DotNetNuke禁用了验证?
- asp.net-mvc – 输入类型=“隐藏”vs htmlhelper奇怪的问题
- 即使通过自定义服务器端验证仍然触发ASP.NET按钮单击事件也
- asp.net-mvc – 一种在ASP.NET MVC中排除操作过滤器的方法?
- asp.net – 在ObjectDataSource更新事件期间取消Gridview编
- asp.net-mvc-4 – 如何在视图页面上缩小脚本块内的JavaScri
- asp.net – 有没有办法使VS2010发布向导在发布网站时复制Ap
- asp.net – 在MVC和WebForms之间共享一个主 – 处
- asp.net-mvc – url.Action在ASP.NET MVC页面上的
- asp.net-mvc – 使用MVC FileStream播放视频文件
- asp.net – URL长度的最佳限制是什么? 100,200
- ASP.NET:Response.Redirect(…)后的代码会发生什
- asp.net-core – Visual Studio 2015中的ASP.NET
- 数以百万计的匿名ASP.Net个人资料?
- asp.net – 避免为每个转发器重新加载所有XML数据
- asp.net – app_themes css文件和版本号
- 启动asp.net输出缓存