90% 程序员都吃亏在这门技术上了,你呢!

老李一直怀疑自己是不是年纪大了,脑子跟不上了。

作为十几年经验的资深 Java 工程师,维护这公司产品的核心代码的他,现在迭代产品的时候,经常出 Bug 。

有时修复一个 Bug 时间,比开发一个需求的时间要长很多,这是常有的事儿,更可怕的是,改完一个 Bug ,又多出来几个 Bug,让人吐血不止。

这样的情况不在少数,近几次的更新都没有按原计划的时间完成,不但让 Leader 对老李的能力产生怀疑,也让他自己开始怀疑自己。

这是产品迭代到一定时期,必然出现的问题;还是自己年纪大了,在开发时各种问题没有考虑周全,多年的开发经验都不能支撑新的需求。

中年危机加上职业瓶颈,老王觉得自己应该回家修整一下状态了......

废话,改 Bug 的痛苦,每个人都经历过…...

不管是系统维护,还是是在现有系统中进行迭代开发的老司机们,这种痛苦经历,想必你们很熟悉吧:

当需要修改一个 Bug 的时候,面对一个类中成百上千行的代码,没有注释,千奇百怪的方法和变量名字,层层嵌套的方法调用,混乱不堪的结构,不要说准确找到 Bug 所在的位置,就是要清晰知道一段代码究竟是做了什么也非常困难,最终,改对了一个 Bug,却多冒出 N 个新 Bug;

同样的情况,当你拿到一份新的需求,需要在现有系统中添加功能的时候,面对一行行完全过程式的代码,需要使用一个功能时,不知道是应该自己编写,还是应该寻找是否已经存在的方法。

编写一个非常简单的新、删、改功能,却要费尽九牛二虎之力,最终发现,系统存在着太多的重复逻辑,阅读、测试、修改非常困难。

在经历了这些痛苦之后,我们都会发出一个感慨:MDZZ,与其进行系统维护和迭代开发,还不如重新设计开发一个新的系统来得痛快……

改不完的 Bug,是「思想错误」

当你遇到,你应该怎样解决?

面对这一系列让软件陷入无底泥潭的问题,基于面向对象思想的领域驱动设计方法是一个很好的解决方法。

从事过系统设计的富有经验的设计师们,对职责单一原则、信息专家、充血/贫血模型、模型驱动设计这些名词或概念应该不会感到陌生。

我们可以发现领域驱动设计的一大优点:系统高度模块化,代码重用度高,不会出现太多的重复逻辑。

从战略到战术,领域驱动设计(Domain Driven Design,DDD)给出了诸多关于软件架构、设计、建模与编码的方法和模式,以用于应对业务复杂度。

对于学习 DDD 的开发人员而言,第一重要的不是掌握 DDD 的模式,而是要改变分析思维与设计思维的方式。将这种思维方式运用到软件项目开发过程中,就是我所提到的「领域模型驱动设计」,它的核心内容可以通过层层推进的形式汇集为如下三句话:

  • 领域为分析建模的驱动力

  • 场景为设计建模的驱动力

  • 任务为实现建模的驱动力

如何理解这三句话?

当你开始领域模型驱动设计时,必须在分析建模阶段抛开实现技术对你的影响,与需求分析人员、测试人员一起单纯针对「领域」进行分析建模,即提炼与抽象领域概念,并以统一语言和模型的形式来表达。

在设计建模阶段,围绕着一个完整的「场景」开展设计工作。需求分析人员为「场景」编写用户故事;测试人员为「场景」编写验收标准;开发人员则开始解剖「场景」,将其分解为组合任务与原子任务,然后各自分配给不同的角色构造型。

到了实现建模阶段,就针对这些任务定义测试用例,开始测试驱动开发,由内至外到达应用服务时,再将它们集成起来。显然,领域模型驱动设计就是针对领域开展的「合而分分而合」的解构过程。

同时,必须谨记:领域模型驱动设计的基础是限界上下文。在领域驱动设计的战略阶段,同样是一个「合而分分而合」的解构过程:将领域分解为限界上下文,再通过上下文映射联合限界上下文共同实现多个领域场景。

以上内容正是我言犹未尽想要表达的精髓。学习领域驱动设计,就需要抓住 DDD 的根本和精髓。你需要理解什么是限界上下文,它带来的价值是什么;你需要理解如何进行领域建模,统一语言在其中扮演了什么样的角色;你需要理解为何领域驱动设计提倡以领域为驱动力,为何需要领域专家参与到项目开发中来。

提升了对这些内容的认识后,再去学习 DDD 给出的设计模式,学习我给出的固化设计过程,如场景驱动设计。然后找三两个不曾实施 DDD 的项目,寻两三个实施了 DDD 的项目,相互对比其模型与代码,你绝对会有一种醍醐灌顶的感觉。当然,这些都需要你沉下心来细心体会,认真思考,还需要你广泛涉猎更多软件设计与开发的知识,如此方能打通 DDD 的任督二脉

DDD 不是一门容易衰亡的软件方法学,反而越来越被行业所认可,薪资待遇也是水涨船高超过了大部分平均值。我从 2017 年 11 月写下本专栏的第一个字到现在完成整个专栏,已有两年多的时间了,好在 DDD 在这两年后依然算是一门显学,在微服务与中台光芒的映衬下,DDD 也变得越来越耀眼

这一路走来,读者们给了我莫大的鼓励。作为全网首个 DDD 专栏,已有超过  5000 位同学订阅学习了。大家每天都在群里进行各种交流分享,毕竟自己闷头学不如群策群力,一起给出解决方案更高效。

_

_

_

_

_

_

_

_

_

_

_

_

_

_

_

_

_

_

_

_

如今,专栏终于完成了!《战略篇》一共 34 章,15 万 5 千字;《战术篇》一共 71 章,35 万 1 千字;合计 105 章,共 50 万 6 千余字,加上两篇开篇词与这篇可以称为写后感的后记,共 108 章,算是凑齐了一百单八将。如此成果也足可慰藉我为之付出的两年多艰辛时光!

如果你想从此写代码再也碰不到 Bug

↓↓↓这门专栏非常适合你!↓↓↓

限时特价中

原价 168 元,限时立享 折!

↓下单再送 门万人订阅的编程课↓

118 元 = 108 章专栏➕7 门赠送编程课➕1V1 答疑➕源码

(迄今为止最划算的订阅时间)

现在订阅你能获得什么?

1. 专业老师陪伴式教学

张逸:曾就职于中兴、惠普、中软国际等公司的高级软件工程师

张逸老师将全程陪你一起吃透每章节内容,不再是你一人闷头去深究那些看不懂的知识点,让你能更高效快速的将所学的内容运用到工作项目中,让你的领导同事大吃一惊。

2. 360度全方位答疑服务

每个专栏都配有多个答疑交流群便于你们提问,老师几乎全程在线解答。群内还会有小助手负责日常整洁,让你在交流学习的同时不受到外界干扰。

3. 额外的福利

你不仅能以 7 折的优惠价格拥有战术➕战略 2 门合订版专栏,现在下单还将免费得到 7 门编程专栏。

如果你想从此写代码再也碰不到 Bug

↓↓↓这门专栏非常适合你!↓↓↓

限时特价中

原价 168 元,限时立享 折!

↓下单再送 门万人订阅的编程课↓

118 元 = 108 章专栏➕7 门赠送编程课➕1V1 答疑➕源码

(迄今为止最划算的订阅时间)


订阅须知

1. 怎样获取福利?

订阅专栏后可联系小助手「GitChatty6」,回复口令即可快速入群获得。

2. 如何阅读专栏?

本专栏可在 GitChat 服务号、App 及网页端上多端阅读。

3. 专栏内容有多少?

本专栏为图文内容,总共 108 篇课时。

4. 专栏有效期多久?

本专栏一经购买,即可享受永久阅读权限。


         

点击阅读原文,立即抢购!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车载多传感器融合定位方案:GPS +IMU+MM

导读 高德定位业务包括云上定位和端上定位两大模块。其中,云上定位主要解决Wifi指纹库、AGPS定位、轨迹挖掘和聚类等问题;端上定位解决手机端和车机端的实时定位问题。近年来,随着定位业务的发展,用户对在城市峡谷(高…

linux-centos7 常用的基本命令--用户组管理

用户组管理 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发、测试、运维、root)。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同…

我画了35张图,就是为了让你深入 AQS!

来源 | 程序员cxuan责编 | Carol谈到并发,我们不得不说AQS(AbstractQueuedSynchronizer),所谓的AQS即是抽象的队列式的同步器,内部定义了很多锁相关的方法,我们熟知的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Sem…

Cassandra Java堆外内存排查经历全记录

背景 最近准备上线cassandra这个产品,同事在做一些小规格ECS(8G)的压测。压测时候比较容易触发OOM Killer,把cassandra进程干掉。问题是8G这个规格我配置的heap(Xmx)并不高(约6.5g)已经留出了足够的空间给系统。只有可能是Java堆…

数据中台之结构化大数据存储设计

前言 任何应用系统都离不开对数据的处理,数据也是驱动业务创新以及向智能化发展最核心的东西。这也是为何目前大多数企业都在构建数据中台的原因,数据处理的技术已经是核心竞争力。在一个完备的技术架构中,通常也会由应用系统以及数据系统构…

清华硕士爆料:这些才是机器学习必备的数学基础

现如今,计算机科学、人工智能、数据科学已成为技术发展的主要推动力。无论是要翻阅这些领域的文章,还是要参与相关任务,你马上就会遇到一些拦路虎:想过滤垃圾邮件,不具备概率论中的贝叶斯思维恐怕不行;想试…

从求生存到修体系,我在阿里找到了技术人的成长模式

阿里妹导读:做业务就好比打仗,团队是我们的归属。在团队中,我们既要通力协作,又要定义问题,既要业务先赢,又要技术成长。越来越多的前端投身业务研发中。想要有更好的发展,业务理解力非常关键。…

2分钟 Docker 部署 SprinBoot 集成 Flowable 工作流引擎

文章目录一、 简介二、 docker流程引擎部署2.1. jdk安装配置2.2. 下载打包好的tar包2.3. 上传tar包2.4. 在线安装Docker2.5. 检验安装是否成功三、tar转docker镜像3.1. 查看当前镜像3.2. 加载备份的flow-mysql.tar镜像文件3.3. 加载备份的flow-admin.tar镜像文件3.4. 加载备份的…

亿级规模的 Feed 流系统,如何轻松设计?

阿里妹导读:互联网进入移动互联网时代,最具代表性的产品就是各种信息流,像是朋友圈、微博、头条等。这些移动化联网时代的新产品在过去几年间借着智能手机的风高速成长。这些产品都是Feed流类型产品,由于Feed流一般是按照时间“从…

linux-centos7 常用的基本命令--磁盘管理(df、du)、进程管理

一、磁盘管理 df(英文全称:disk full):列出文件系统的整体磁盘使用量(类似于windows我的电脑中的显示)du(英文全称:disk used):检查磁盘空间使用量 1、df …

他靠下班后 1 小时,挣到 3 倍工资:赚钱,真的不用拼命

越来越多的人学习编程不再只是为了当程序员,而是为了提升效率,多一份职业技能,正面应对瞬息万变的全球大环境。据麦肯锡全球研究院发布的一份就业报告中显示,到 2030 年,中国预计将有 1200 万~ 1.02 亿人面…

蚂蚁金服褚霸:敲最牛的代码,骑最野的车

你印象中的程序员是怎样的群体?随着全民互联网的发展,程序员这个群体快速走进大众视野,在新闻和影视剧中,他们被贴上各种标签:双肩包、格子衫、拖鞋、秃顶、刻板、木讷、单身……热搜新闻“996.ICU”更是道出了万千程序…

linux-centos7 常用的基本命令--top

1、Linux top 命令 1.1 top 命令基础用法 Linux top命令用于实时显示 process 的动态。 语法 top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]参数说明: d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 sq : 没有任何延迟的显示…

MongoDB副本集同步原理

MongoDB的同步原理,官方文档介绍的比较少,网上资料也不是太多,下面是结合官方文档、网上资料和测试时候的日志,整理出来的一点东西。 因为MongoDB的每个分片也是副本集,所以只需要搞副本集的同步原理即可。 一、Initi…

阿里技术专家告诉你,如何画出优秀的架构图?

作者 | 三画责编 | Carol来源 | 公众号「阿里巴巴云原生」导读:技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改…

解决Linux docker中的mysql区分大小写问题

注:mysql5.7为本例docker中mysql容器的名称。 进入mysql容器: docker exec -it mysql5.7 /bin/bash以root用户登录mysql: mysql -u root -p查看当前mysql的大小写敏感配置: show global variables like %lower_case%;lower_case_file_sys…

不要低估AI面临的困境

“通过对7000多家“AI初创企业”进行研究分析,我发现大多数人低估了AI发展所面临的困境和挑战。这其中,有你的参与吗?” 你可能听过Andrew Ng这句话类似的一些说法:“AI正如同我们新时代的电力!电力的发展曾经改变了无数行业;现如今的AI也将如…

mysql-修改mysql最大连接数

1、修改mysql最大连接数 systemctl start mysqld 启动mysql systemctl status mysqld 查看mysql状态 systemctl restart mysqld 重启mysql进入mysql查看最大连接数: mysql -u root -p sh…

重构技术架构首先解决组织架构

技术架构来源于人员组织架构 过去两年做了不少大型的中台项目,什么是中台?这篇文章就不多说了,自行百度一下,总而言之最后我得出了一个结论——企业什么样的人员组织架构就会什么样的系统技术架构。我们先以下一幅图:…

为你整理了一份 Mysql 的学习笔记,建议收藏学习!

作者 | 陈熹责编 | Carol来源 | 早起PythonSQL是一个存活近半个世纪的语言,如今仍有大量人在使用。它语法简单,对培养数据整理和提取的思维有很大帮助。我将我过去的笔记分享给大家,希望能为大家的学习提供参考,更希望有人因此能迈…