没有合适的资源?快使用搜索试试~ 我知道了~
Domain Driver Design with Java 的中文翻译 - 学习过程中翻译的
需积分: 8 0 下载量 168 浏览量
2022-12-27
10:56:31
上传
评论
收藏 36.71MB PDF 举报
温馨提示
试读
159页
Domain Driver Design with Java 的中文翻译 -- 学习过程中翻译的,借助了百度翻译。请指正。
资源推荐
资源详情
资源评论
前言
领域驱动设计(DDD)提供了一组原则、模式和技术,主题专家、架构师、开发人员和其他团队成员可以采用这
些原则、模式、技术来共同工作,并将复杂系统分解为良好的、协作的、松散耦合的子系统。当埃里克∙埃文斯
(EricEvans)在21世纪初引入这些概念时,在很多方面,这些原则都远远超前于他们的时代。我们坚定地站在
单一的时代,面向服务的架构(SOA)作为一个概念刚刚开始扎根,而云、微服务、持续交付等等甚至还不存
在!虽然采用某些战术方面相对容易,但DDD的战略方面在很大程度上仍然被视为不合理的开销
第一部分
尽管IT行业以处于技术的最前沿而自豪,但它也监管着相当高比例的项目,这些项目由于某种原因而彻底失败或
无法达到最初的目标。在第1部分中,我们将探讨软件项目未能实现其预期目标的原因,以及实践领域驱动设计
(DDD)如何显著提高实现成功的几率。我们将快速浏览埃里克∙埃文斯(EricEvans)在其同名开创性著作中阐
述的主要概念,并探讨其在分布式系统时代的重要性。我们还将研究几种流行的体系结构样式和编程范式,并探
讨DDD如何适应事物的方案。
第一章:领域驱动设计的基本原理
服从任何权威的人不能被称为理性或道德的人,除非服从理性
根据2020年2月发布的项目管理协会(PMI)报告,只有77%的项目达到了预期目标,甚至只有在最成熟的组织
中才是如此。对于不太成熟的组织,这一数字仅为56%;也就是说,大约每两个项目中就有一个没有达到预期目
标。此外,大约每五个项目中就有一个被宣布为彻底失败。与此同时,我们似乎也在着手我们最雄心勃勃、最复
杂的项目。
在本章中,我们将研究项目失败的主要原因,并研究应用领域驱动设计(DDD)如何提供一套指导原则和技术,
以提高成功几率。当埃里克∙埃文斯早在2003年就写过这本经典著作时,我们来看看为什么这本书在当今时代仍然
非常重要。
为什么软件项目会失败?
失败只是重新开始的机会,这一次更明智,项目成功的因素:
Inaccuraterequirements
PMI2017年的职业脉搏报告强调了一个非常严峻的事实——绝大多数项目都因不准确或误解的要求而失败。因
此,不可能建造客户可以使用的、他们满意的东西,如果建造了错误的东西,那么他们的工作效率会更高,甚至
更不可能在预算内按时建造项目。
IT团队,尤其是大型组织中的IT团队,由单一技能的角色组成,如用户体验设计师、开发人员、测试人员、架构
师、业务分析师、项目经理、产品所有者和业务发起人。在很多情况下,这些人是不同组织单位/部门的一部分,
每个部门都有自己的优先事项和动机。更糟糕的是,这些人之间的地理隔离只会不断加剧。降低成本的需要和最
近的新冠肺炎生态系统也无济于事。
孤岛思维:
太多的架构
编写复杂的软件是一项艰巨的任务。你不能只希望坐下来开始输入代码,尽管这种方法在一些小情况下可能有
效。在将业务想法转化为工作软件之前,必须彻底了解手头的问题。例如,如果不首先了解信用卡的工作原理,
就不可能(或者至少是极其困难的)构建信用卡软件。为了传达您对问题的理解,在编写代码之前创建问题的软
件模型并不罕见。此模型或模型集合表示对问题和解决方案架构的理解。
创建一个完美的问题模型的努力——一个在非常广泛的背景下准确的问题模型——与众所周知的圣杯追求并无不
同。负责构建体系结构的人可能会陷入分析瘫痪和/或前期的大设计中,产生一个或多个层次过高、一厢情愿、镀
金gold-plated、流行语驱动buzzword-driven或与现实世界脱节的工件,而无法解决任何实际业务问题。在项
目的早期阶段,当团队成员的知识水平仍在不断提高时,这种锁定尤其有害。不用说,采用这种方法的项目很难
始终如一地取得成功.
太少的架构
敏捷软件交付方法在90年代末和2000年代初表现出来,以应对被统称为瀑布的重量级过程。这些过程似乎倾向于
基于一厢情愿的理想世界场景的前期大设计和抽象的象牙塔思维,在项目进展过程中,提前想好事情的前提最终
会避免严重的开发难题。
相比之下,敏捷方法似乎更倾向于一种更灵活和迭代的软件开发方法,高度关注工作的软件而不是其他工件,如
文档。如今,大多数团队都声称要实践某种形式的迭代软件开发。然而,由于痴迷于宣称与底层原则相对应的一
系列特定的敏捷方法,许多团队误解了只有足够的架构而没有可感知的架构。这导致了一种情况,即添加新功能
或增强现有功能所需的时间比以前长得多,从而加速了解决方案的发展,成为令人恐惧的大泥球
额外的复杂度
MikeCohn普及了测试金字塔的概念,他在那里谈到了大量的单元测试应该如何形成一个健全的测试策略的基
础,随着你向金字塔的移动,数量会显著减少。这里的基本原理是,当你往金字塔上移动时,维护成本会大幅上
升,而执行速度则会减慢。然而,事实上,许多团队似乎采用了一种与完全相反的策略-测试冰淇淋筒,如下图所
示:
测试冰淇淋筒是FredBrooks在其开创性论文《软件工程中的无银弹本质和意外》中称之为偶然复杂性的经典案
例。所有软件都具有解决问题所固有的一些基本复杂性。在为非平凡问题创建解决方案时尤其如此。然而,偶然
或偶然的复杂性并非直接归因于问题本身,而是由所涉及的人员、他们的技能水平、所使用的工具和/或抽象的局
限性造成的。不关注偶然的复杂性会导致团队从关注真正的问题偏离方向,解决提供最大价值的问题。这样的团
队很自然地将成功的几率降到最低。
非受控技术债务
金融债务是指向外部方借款,以迅速为企业运营提供资金,并承诺及时偿还本金和约定利率。在适当的情况下,
这可以大大加快企业的发展,同时允许所有者保留所有权、减少税收和降低利率。另一方面,无法按时偿还债务
可能会对信用评级产生不利影响,导致利率升高、现金流困难和其他限制。
当开发团队采取可以说是次优的行动来加快一组特性或项目的交付时,技术债务就是结果。在一段时间内,就像
借钱可以让你更快地做事一样,技术债务可以导致短期的速度。然而,从长远来看,软件团队将不得不花费更多
的时间和精力来简单地管理复杂性,而不是考虑产生架构上合理的解决方案。这可能导致恶性循环,如下图所
示:
在麦肯锡最近的一项调查中,向首席信息官发出的报告中,约60%的人报告,过去3年技术债务的数量有所增加。
同时,超过90%的首席信息官将不到五分之一的技术预算用于支付高软件质量(或缺乏高软件质量)与可预测地
增强软件的能力之间的深度关联。虽然承担一定数量的技术债务是不可避免的,也是做生意的一部分,没有系统
地偿还债务的计划可能会对团队生产力和实现价值的能力产生重大不利影响。
忽略非功能性需求
利益相关者通常希望软件团队将大部分(如果不是全部)时间用于提供增强功能的特性。这是可以理解的,因为
这些功能提供了最高的ROI。这些特性称为功能需求。另一方面,非功能需求(有时也称为跨功能需求)是指系
统的那些方面,这些方面不会直接影响功能,但会对使用和维护这些系统的人员的效率产生深远影响。NFR有很
多种。常见NFR的部分列表如下图所示
用户很少明确请求NFR,但他们几乎总是希望这些功能成为他们使用的任何系统的一部分。通常,系统可以在不
满足NFR的情况下继续运行,但不会对用户体验的质量产生不利影响。例如,一个网站的主页在低负载下加载时
间不到1秒,而在高负载下加载需要30秒,在这些压力时期可能无法使用。不用说,如果不以与明确的、增值的
功能特性相同的严格程度来处理NFR,可能会导致系统不可用,进而导致故障。
在本节中,我们分析了软件项目失败的一些常见原因。有可能提高我们的赔率吗?在此之前,我们先来看看现代
软件系统的本质,以及如何应对随之而来的复杂性。
现代系统和处理复杂性
我们不能用创造问题的思维水平来解决问题。
正如我们在上一节中所看到的,软件努力失败有几个原因。在本节中,我们将尝试了解软件是如何构建的,当前
流行的现实是什么,以及我们需要做出哪些调整来应对
软件是如何构建的
构建成功的软件是一个不断提炼知识并以模型形式表达的迭代过程。我们已经尝试在这里从高层次捕捉流程的本
质:
剩余158页未读,继续阅读
资源评论
nchwang
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JavaScript《基于自动分析数据并给出营业建议的餐厅管理系统(接入AI) 》+源代码+项目说明及资料
- 355670834783295707ad04e-427f-4cde-9589-e578224a8459.zip
- 动态sql解析引擎,类似mybatis动态sql的功能
- EDA365-Skill-V2.5安装包,支持Allegro17.x版本
- C# 常用单词汇总,常用单词汇总
- 【ERP标准流程-标准流程-库内业务管理】(DOC 14页).doc
- Python《数据库期末作业-餐厅点单系统 》+源代码+设计资料
- 学生成绩管理系统(C++课程设计
- 双指针法判断链表有环-go语言实现
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功