周立功:嵌入式系统软件的开发,领域驱动设计是最合适的

Posted 电子工程师时间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了周立功:嵌入式系统软件的开发,领域驱动设计是最合适的相关的知识,希望对你有一定的参考价值。

今天介绍一些关于软件开发的概念。

当你正在观察一个问题“领域”,比如,航班信息管理系统就是一个领域,其包括飞机(Plane)、航班(Flight)和飞行员(Pilot)等“概念”。实际上概念是符号也是定义,比如,航班是描述飞机起始飞行的概念,当将其定义为Flight时,这个概念并没有说明从哪里到哪里,隐藏了具体细节。当你正在这样做的时候,其实就是在进行“抽象”。抽象强调什么是共同的,从不注重细节,在抛开具体的东西时,抽象只注重一般的东西,因此抽象是分析问题的基本工具。

周立功:嵌入式系统软件的开发,领域驱动设计是最合适的

虽然我们对“领域”这个概念非常熟悉,但有多少人真正重视它呢?软件开发人员几乎总是专注于技术,将技术作为自己能力的展示和成功的度量。到底如何开发才能保证项目成功呢?什么样的软件才能为用户提供真正的价值呢?什么样的团队才是优秀的团队呢?在每个项目的生命周期中,都会有一些重大的转折点。如何制定决策?如何把握项目的方向?如何处理和面对各种机会和挑战呢?这些问题都对项目产生决定性的影响。

直到Eric Evans出版了他的巨著《领域驱动设计》之后,人们才真正开始关注领域,关注核心领域,关注领域驱动的设计,关注模型驱动的开发。Eric Evans在他的著作中,既介绍了成功的案例,也谈论自己的一些失败经历。虽然Eric Evans的思想是非常伟大的,但还是有一些不足之处。我将试图站在Eric Evans的肩膀上,针对嵌入式系统软件的开发,从另一个不同的视角出发,完善领域驱动设计的理论与方法。

周立功:嵌入式系统软件的开发,领域驱动设计是最合适的

传统的软件项目“开发”指的是软件生命周期,开发是基于现实世界以抽象为基础的思维方式,它是由分析、设计和实现三个阶段所组成的。软件工程方法为构建软件在技术上提供了如何做的解决方法,其包括需求、分析与设计、实现、测试和部署等五项活动。

开发的第一个环节就是和用户沟通,其目的是理解用户的“需求”,与用户的意见达成一致。“分析”就是搞清楚用户到底需要什么?分析是指得出用户需求和用户期望的活动,其强调的是如何产生用户的需求模型,而不是解决方案。“设计”是指发生在分析和实现之间的为给定问题提供解决方案的活动,即从一个问题开始,以一种解决方案结束。其强调的是排弃底层或显而易见的细节,寻找满足需求的概念性的解决方案,而不是实现(实际代码)。

总而言之,分析与设计是将需求转换为系统设计的模型,其实无论是建筑师、园林工程师和桥梁建造者,甚至是木匠,每天的工作都离不开模型。每当遇到问题时,通常都会画一张草图来辅助理解整个项目的构想——体系结构、不同的组件如何结合,以及其它一些特征。接着将草图进一步细化,以便更好地理解问题并找到解决方案。软件工程师同样如此,利用模型来更好地理解需求,以完成符合需求的软件设计。

“实现”包括编程、测试和对设计进行集成,以发现编码中的错误,得到一个可执行的系统。“测试”是对实现的测试,确保实现了需求。而“部署”就是确保软件能被最终用户使用,用户通过评估并给出反馈意见。

这里介绍了与领域驱动设计的相关概念,但并没有介绍领域驱动设计的核心,这一节内容介绍的仅仅是开发流程。接着介绍了传统的开发模式,这也是很多专著中介绍的知识,但为何大家学习之后很难落地呢?说明传统的开发方法还是存在问题,其最大的问题是分析、设计与实现完全割裂开来,看起来很好,实际上在编码阶段模型就很难起到更大的作用了。

对于嵌入式系统软件的开发来说,领域驱动设计是最合适的,因为要开发什么产品和功能,我们本身就是问题领域专家,我们非常清楚开发目标,所以我在嵌入式软件开发中推崇领域驱动设计方法。那什么产品使用用例分析呢?

实践证明,领域分析非常依赖于领域专家和分析师的个人经验,对于委托开发软件项目来说,这是很难接受的。因为这样的过程既不是确定的,也无法预测其成功与否。如何以一种有意义的方式驱动分析过程呢?这就是由Jacobson正式提出来的用例分析。

用例分析就是需求分析,用例是一个相对独立的业务单元,用例与用例之间的松耦合是通过技术架构实现的。而用户与软件不是孤立的两个领域,而是一个完整的系统,这是用例分析的本质。虽然用例分析和领域分析都存在领域模型,但用例分析中的模型处于从属地位,它是从用例中推导出来的,而领域分析中的模型则是驱动一切的基础。

今天就介绍这么多了,大家慢慢地消化。如果你对建模没有研究和实践,就当作一堂入门课程吧!建模的方法很多,各个不同的流派文人相轻,总是很难融合,只有站在公正的立场才能看出其中的端倪,比如,我作为一个投资人,当我的钱被大量地消耗时,那么我看问题的角度与专家,以及开发人员的视角,则完全不一样了。如果你因为开发人员的蛮力开发和说跳槽就跳槽的现象困惑时,你对开发的理念和方法的认真程度就完全不一样了,因为你面临的可能是一夜回到解放前,甚至是跳楼,而开发人员顶多是再换一个老板。



小编做了一个尝试,在APP【小密圈】建立了一个收费圈(因为付费是对知识的尊重,也是很好的筛选器),专注于做电子技术优质内容分享,帮助我们的电子工程师过滤无效信息,提供一个有价值内容交流的地方。


欢迎你的加入。


以上是关于周立功:嵌入式系统软件的开发,领域驱动设计是最合适的的主要内容,如果未能解决你的问题,请参考以下文章

周立功can通信中断原因

如何通过 DDD(领域驱动设计) 降低软件开发的成本?

周立功can卡是如何运用在新能源汽车维修中的 他的控制逻辑是怎样的?

USBCANii通过USB接口连接到电脑,使用周立功测试软件ZLGCANtest.exe,提示“打开设备失败”

华为电脑W10系统装了周立功USB+CAN不能用怎么弄?

《领域驱动设计:软件核心复杂性应对之道》读书笔记