4、传统三层架构与DDD分层架构
4、传统三层架构与DDD分层架构
模型是抽象的
现实是形象的
技巧是重要的
思想是永恒的
从传统三层架构与DDD分层架构的编程演变其实是思想的演变。
传统三层架构,即用户界面层UI、业务逻辑层BAL、数据访问层DAL。一般同时还有建立一个Model实体类的工程项目。DDD分层架构,即表现层UI、应用层Application、领域驱动层Doman、基础设施层Infrastructure。
传统三层架构,我一直使用、结构单一、逻辑也清晰,三层各处理各自的事务,上层向下层引用接口与方法,下层向上层提供接口服务,各层之间调度方法时可能通过Model传值,也可以返回值Model。但以往,我处理的业务逻辑层中,基本上都是将DAL层的接口值返回给业务逻辑层,然后BLL层再将结果返回给UI层,BLL层只做了上传下达的作用,其它的作用发挥得较少。以往三层架构中的重点是BLL层。当我需要新增业务功能时,或者需要CRUD操作,需要将UI层、BLL层、DAL层都需要增加类文件以达到处理CRUD操作的功能。当然,传统三层架构中,也会引入一个新的Common工程或Utility工程,为BLL、DAL、UI提供共用或通用方法或行为的支持。若是有需要对第三方软件或系统提供数据接口,这时,可以将接口作为IIS站点或WebService 或WebAPI提供,此时这个接口可以放在UI供第三方调用。
DDD分层架构,是从传三层架构中演变过来的。它将传统的三层架构做了一定的变更,将四个层中的内容做了重新归内,并对分层结构的业务重点作了分配。UI层还是UI层、应用层用于调度第三方的应用接口、以及提供口服务给第三方,同时将在应用层增加Dto工程项目用于操作应用层与UI层的数据传递即值对象传递以及Dto与Model实体类之间的映射,将传统的BLL层、Model层归纳到领域驱动层Domain中,同时将仓储的接口层放在Domain层中,将传统的DAL层实现以及通用的Common层或Utility层归纳到基础设施层Infrastructure中。
从传统三层架构(包括Common公共层、Model实体层)演变到DDD领域驱动模型设计的分层架构,从项目归纳上比较,可能多了DAL接口层即仓储接口层,其它的工程项目只是做了位置上的迁移。同时传统BLL层的命名变理为Service,同时在应用层增加了Dto工程项目。
从这种演变上可以看出,进一步将层与层之间的耦合减低、将Dto(数据传输层-值对象)引入,给表现层提供了更多的数据展示的灵活性。更多演变的体验,后续文章再叙述。
解决方案结构命名可参考http://www.cnblogs.com/lori/p/3345590.html
http://www.cnblogs.com/daxnet/archive/2010/07/07/1772584.html
http://www.cnblogs.com/daxnet/archive/2011/05/10/2042095.html
4、传统三层架构与DDD分层架构的更多相关文章
- 传统三层架构与DDD分层架构
参考 https://www.cnblogs.com/sandyliu1999/p/4969445.html
- 应用程序框架实战十三:DDD分层架构之我见
前面介绍了应用程序框架的一个重要组成部分——公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定要使用DDD这样的架构 ...
- 应用程序框架实战十三:DDD分层架构之我见(转)
前面介绍了应用程序框架的一个重要组成部分——公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定要使用DDD这样的架构 ...
- DDD分层架构之仓储
DDD分层架构之仓储(层超类型基础篇) 前一篇介绍了仓储的基本概念,并谈了我对仓储的一些认识,本文将实现仓储的基本功能. 仓储代表聚合在内存中的集合,所以仓储的接口需要模拟得像一个集合.仓储中有很多操 ...
- DDD分层架构之我见
DDD分层架构之我见 前面介绍了应用程序框架的一个重要组成部分——公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定 ...
- 【转载】DDD分层架构的三种模式
引言 在讨论DDD分层架构的模式之前,我们先一起回顾一下DDD和分层架构的相关知识. DDD DDD(Domain Driven Design,领域驱动设计)作为一种软件开发方法,它可以帮助我们设计高 ...
- DDD分层架构的三种模式
引言 在讨论DDD分层架构的模式之前,我们先一起回顾一下DDD和分层架构的相关知识. DDD DDD(Domain Driven Design,领域驱动设计)作为一种软件开发方法,它可以帮助我们设计高 ...
- 应用程序框架实战十八:DDD分层架构之聚合
前面已经介绍了DDD分层架构的实体和值对象,本文将介绍聚合以及与其高度相关的并发主题. 我在之前已经说过,初学者第一步需要将业务逻辑尽量放到实体或值对象中,给实体“充血”,这样可以让业务逻辑高度内聚, ...
- 应用程序框架实战十六:DDD分层架构之值对象(介绍篇)
前面介绍了DDD分层架构的实体,并完成了实体层超类型的开发,同时提供了验证方面的支持.本篇将介绍另一个重要的构造块——值对象,它是聚合中的主要成分. 如果说你已经在使用DDD分层架构,但你却从来没有使 ...
随机推荐
- rust连接oracle数据库遇到DPI-1047: Cannot locate a 64-bit Oracle Client library的解决方案
这两天要实现一个用rust连接远程的oracle数据库的需求,所以就需要用rust连接oracle. 在github上面找到一个库,地址:https://github.com/kubo/rust-or ...
- etcdserver: mvcc: database space exceeded
文章目录 查看节点状态 获取旧版本号 压缩旧版本 清理碎片 再次查看节点状态 清楚告警 k8s的apiserver组件重启失败,通过journalctl -xeu kube-apiserver命令查看 ...
- win10 VScode配置GCC(MinGW)
前提 安装 Visual Studio Code 安装 C/C++ 扩展 for VS Code 也可以在vscode的extension界面搜索'c'查找插件安装 获取最新的 Mingw-w64 , ...
- io流复习+代码演示
前置知识: 序列化和反序列化 1.序列化就是在保存数据时, 保存数据的值和数据类型 2.反序列化就是在恢复数据时, 恢复数据的值和数据类型 3.需要让某个对象支持序列化机制,则必须让其类是可序列化的, ...
- MYSQL时代是否将结束
前言 已知MariaDB预计于今年下半年将以spac形式完成上市,最近也看了不少文章,发现MariaDB正在以一个迅猛的速度超越mysql,mysql 可以说是开源数据库中最具代表性的一个,甚至可以说 ...
- ubuntu改镜像源
https://blog.csdn.net/qq_28193019/article/details/89352824
- C语言中puts()和printf()区别
puts的功能更加单一,只能输出字符串:printf的功能更加广,可以格式化数据,输出多种类型的数据. puts()函数用来向标准输出设备(屏幕)写字符串并换行. 调用方式为puts(string): ...
- 【C# IO 操作】使用StringWriter和StringReader的好处
当你有一组应用程序接口(API)只允许用Writer或Reader作为输入,但你又想使用String,这时可以用StringWriter或StringReader. 假设有下面这样一个process方 ...
- C# 使用NPOI处理Excel模板-【前面部分固定,中间是动态的几行,尾部是固定的部分】
今天同组的兄弟问我,他有一个导出的模板,大概如下: [前面部分固定,中间是动态的几行,尾部是固定的部分].其实这个很像单链表往单链表在指定插入数据. 他问我怎么做才好,他想到的做法是:因为这些动态列的 ...
- WARN node unsupported "node@v6.11.2" is ......(windows系统更新node版本)
问题: 使用npm下载文件时报错:WARN node unsupported "node@v6.11.2" is incompatible with electron@^7.1.9 ...