[ASP.NET].NET逻辑分层架构总结
一.基础知识准备:
1.层的原则:
(1)每一层以接口方式供上层调用。
(2)上层只能调用下层。
(3)依赖分为松散交互和严格交互两种。
2.业务逻辑分类:
(1)应用逻辑。
(2)领域逻辑。
3.采用的层:
(1)表示层(用户接口层):领域无关。
(2)服务层(应用层):应用逻辑。
(3)业务逻辑层(领域层):领域逻辑。
(4)共享层:提供通用代码。
(5)实现层:提供接口实现。
4.约定:
(1)领域层默认采用领域模型
(2)数据访问层默认需要引用领域模型
二.分层架构
分层架构的三个基本层次为:表示层、业务逻辑层和数据访问层。如果按照业务逻辑的分类将业务逻辑层分解为服务层和领域层,则三层扩展为四个层次:表示层、服务层、领域层和数据访问层。数据访问层一般必须了解领域模型,这将在层之间产生双向依赖,通常我们有如下两种解决方案:
1.将领域模型放置在共享层:
评价:PetShop采用此种模型,但缺点众多:业务逻辑层名不副实,领域模型实为数据模型,保持了层间依赖,引入了更多依赖,明显的数据驱动思想,没有以领域为核心。
2.将数据访问接口定义在业务逻辑层:
评价:NopCommerce采用此种模型,即使采用分离出了服务层和采用了资源库命名方式,但NopCommerce不是DDD分层架构,只是采用了领域模型和接口分离原则的普通三层架构。缺点:除了数据房产,没有将其他具体的技术依赖从业务逻辑层中分离。
三.DDD分层:
DDD分层明确的将业务逻辑层分成了应用层(服务层)和领域层两部分。同时将数据访问和其他接口的具体技术实现部分统一到了基础设施层。
1.原始的DDD分层:
评价:优点是将具体技术实现从领域分离,基础设施层复用价值增加。缺点是没有使用共享和实现的概念细分基础设施层,导致在基
此文来自:
马开东博客 转载请注明出处 网址: http://www.makaidong.com
础设施层中实现仓储会产生反向依赖,虽然在单项目解决方案中没有影响(仅命名空间层次的形式上的依赖),但在.NET多项目解决方案中,只能通过接口分离方式将仓储实现独立成类似数据访问层的方式。
2.改善的DDD分层:
评价:基础设施层同时具有共享层和实现层的特征。优点是终于做到了形式上领域为核心且同时解决了在基础设施层中实现仓储不能引用领域模型的尴尬,缺点是同样没有区分共享和实现的概念。
3.最新的DDD分层:
评价:优点是这是真正的以领域为核心,再也不用为基础设施层无法引用领域层而再服务层中再次适配了。使用依赖倒置原则彻底各层对具体技术的依赖倒置。缺点,依赖倒置应用过了头,同样是在单项目解决方案中没有问题,但在.NET多项目解决方案中会导致命名空间形式上的双向依赖。基础设施层作为实现层基本上没有了复用的价值。更好的方式是调换图中用户接口层和基础设施层的位置。
可以根据需要考虑在上图添加适当的共享层。
四.架构的趋势:
(1)以业务逻辑为核心,更加重视业务逻辑。
(2)将业务逻辑层的具体依赖划分到一个层次统一管理。
(3)更加重视降低解决方案内的依赖性而不是解决方案间的代码复用。
(4)共享层和实现层的分离将会越来越多的体现。例如洋葱型架构。
[ASP.NET].NET逻辑分层架构总结的更多相关文章
- .NET逻辑分层架构总结
一.基础知识准备: 1.层的原则: (1)每一层以接口方式供上层调用. (2)上层只能调用下层. (3)依赖分为松散交互和严格交互两种. 2.业务逻辑分类: (1)应用逻辑. (2)领域逻辑. 3.采 ...
- (转)基于DDD的现代ASP.NET开发框架--ABP分层架构
介绍DDD概念Eric Evans的“Domain-Driven Design领域驱动设计”简称 DDD,它是一套综合软件系统分析和设计的面向对象建模方法,或者可称为MDD模型驱动方法的一种,区别于M ...
- DDD分层架构的进化
.NET逻辑分层架构演示:DDD分层架构的进化 概述: 架构是高层的设计,如果设计和理解有误,必将在实现时带来各种问题.架构又是最稳定的,不会因为各种具体技术的依赖,如各种UI框架.ORM框架.I ...
- ABP(现代ASP.NET样板开发框架)系列之3、ABP分层架构
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- 基于DDD的现代ASP.NET开发框架--ABP系列之3、ABP分层架构
基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:ht ...
- Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始
时隔一年,继续我们的Apworks框架之旅.在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架 ...
- 应用程序框架实战十三:DDD分层架构之我见
前面介绍了应用程序框架的一个重要组成部分——公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定要使用DDD这样的架构 ...
- 分享一个UI与业务逻辑分层的框架(一)
序言 .NET(C#)的WinForm如何简单易行地进行UI与业务逻辑分层?本系列文章介绍一个WinForm分层框架,该框架针对WinForm中的TextBox,CheckBox,RadioButto ...
- 从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构
Microsoft.AspNet.Identity简介 Microsoft.AspNet.Identity是微软在MVC 5.0中新引入的一种membership框架,和之前ASP.NET传统的mem ...
随机推荐
- 64位tomcat不能配32位的JDK使用
警告: The APR based Apache Tomcat Native library failed to load. The error reported was [D:\apache-tom ...
- forward(请求转发)和redirect(重定向)的区别
原理: forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原 ...
- Asp.net中判断是否是指定页面请求的代码示例
//获取请求网址,非法请求,返回主页 if (Request.UrlReferrer != null) { string requstUrl = Request.UrlReferrer.Absolut ...
- python scikit-learn 安装中的各种事宜
由于兴趣,想安装scikit,但是安装时提示pip版本低,让更新,但是他给的更新命令用了之后并不能更新成功(我是指我的) 网上的各种命令都试过了,弄了大半天还是不行,后来我把SCIKIT换成(whl- ...
- AasyncTask中执行execute()还是executeOnExecutor()
executeOnExecutor()api 11 才出现的 并行的 效率比execute()高因为execute()是串行的 import android.app.Activity; import ...
- 原生JS获取地址了参数
方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new RegExp("( ...
- [PHP]require include
- wcf服务契约代理链
意图:为了是客户端代理呈现出面向对象的多态的特征 a. 服务端 .契约 实现了契约的继承这个在服务端是一点问题没有,因为oprationcontract可以继承,虽然DataContract不能实现继 ...
- wcf服务契约的重载
a. 服务端 .服务端 契约用OperationContract的Name实现重载 using System; using System.Collections.Generic; using Syst ...
- c++ 博客资源
/************************************************************** 技术博客 http://www.cnblogs.com/itdef/ ...