今天我来介绍一下关于软件开发的一些概念。
当你在观察一个问题“领域”的时候,比如说,航班信息管理系统就是一个领域,这个领域里包含了飞机、航班、飞行员等“概念”。其实概念就是一个符号,一个定义。比如说,航班是一个描述飞机开始飞行的概念,当它被定义为 Flight 的时候,这个概念并没有说明要飞到哪里,而是把具体的细节给隐藏了起来。当你在这么做的时候,其实就是在“抽象”。抽象强调的是共性,从来不会关注细节。抽象抛开具体的东西,只关注一般的东西。所以,抽象是分析问题的一个基本工具。
虽然我们对“领域”这个概念非常熟悉,但是真正关注它的人又有多少呢?软件开发人员几乎总是把注意力放在技术上,把技术作为自己能力的体现和衡量成功的标准。开发如何才能保证项目的成功?什么样的软件才能给用户提供真正的价值?什么样的团队才是优秀的团队?在每个项目的生命周期中,都会有一些重大的转折点。如何决策?如何把握项目的方向?如何应对和面对各种机遇和挑战?这些问题对项目有着决定性的影响。
直到 Eric Evans 发表了他的巨作《领域驱动设计》,人们才真正开始关注领域、核心领域、领域驱动设计、模型驱动开发。在书中,Eric Evans 不仅介绍了成功的案例,还谈到了自己的一些失败经验。虽然 Eric Evans 的思想很伟大,但还是存在一些不足之处。我将尝试站在 Eric Evans 的肩膀上,从不同的角度完善领域驱动设计的理论和方法,为嵌入式系统软件的开发提供帮助。
传统软件项目“开发”是指软件生命周期。开发基于现实世界的抽象思维模式,由分析、设计和实现三个阶段组成。软件工程方法为构建软件提供了一种技术解决方案嵌入式系统软件教程,其中包括需求、分析与设计、实现、测试和部署五个活动。
开发的第一步是与用户沟通,其目的是了解用户的“需求”,与用户达成共识。“分析”是发现用户真正需要什么。分析是指推导用户需求和用户期望的活动,它强调如何生成用户需求模型而不是解决方案。“设计”是指发生在分析和实现之间的活动,为给定的问题提供解决方案,即从一个问题出发,到一个解决方案结束。它强调抛弃底层或显而易见的细节,找到符合需求的概念性解决方案,而不是实现(实际代码)。
简单来说,分析与设计就是将需求转化为模型,用于系统设计。其实,无论是建筑师、景观工程师、桥梁建造者,甚至是木匠,模型都是他们日常工作中不可或缺的。每当遇到问题时,通常会绘制草图,以帮助理解整个项目的概念——架构、不同组件如何组合以及一些其他特征。然后进一步细化草图,以更好地理解问题并找到解决方案。软件工程师也是如此,他们使用模型来更好地理解需求,以便完成符合需求的软件设计。
“实施”包括编程、测试和集成设计,以查找编码中的错误并获得可执行系统。“测试”是对实施进行测试,以确保满足要求。而“部署”是为了确保软件可以被最终用户使用,并由用户进行评估和反馈。
这一部分介绍了领域驱动设计相关的概念,但是并没有介绍领域驱动设计的核心,这部分只介绍了开发流程。然后介绍了传统的开发模式,这也是很多专著里介绍的知识,但是为什么大家学了之后很难去实现呢?这就说明传统的开发方式还是存在问题的,最大的问题就是分析、设计和实现完全分离,看上去很好,但是实际上在编码阶段模型很难发挥出更大的作用。
对于嵌入式系统软件的开发嵌入式系统软件教程,领域驱动设计是最适合的,因为我们是问题领域的专家,我们非常了解开发目标。所以我提倡在嵌入式软件开发中使用领域驱动设计。那么什么产品使用用例分析呢?
实践表明,领域分析高度依赖于领域专家和分析师的个人经验,这对于委托的软件开发项目来说是难以接受的。因为这样的过程既不确定,又不可预测。如何以有意义的方式驱动分析过程?这就是 Jacobson 正式提出的用例分析。
用例分析就是需求分析,一个用例是一个相对独立的业务单元,用例之间的松耦合是通过技术架构实现的,用户和软件不是两个孤立的域,而是一个完整的系统,这是用例分析的本质。虽然用例分析和领域分析都有领域模型,但是用例分析中的模型是从属的,源于用例,而领域分析中的模型是驱动一切的基础。
今天就讲这么多,请大家慢慢消化,如果你对建模没有研究和实践,就当一门入门课吧!建模的方法多种多样,不同的学派总是难以融会贯通,只有站在公正的立场,才能看出端倪。比如,作为一个投资人,当我的钱被大量消耗的时候,我看问题的角度和专家、开发人员完全不一样。如果你被开发人员的蛮力开发和跳槽现象搞晕了,你对开发的理念和方法的认真程度就会完全不一样,因为你可能面临一夜之间回到解放前时代,甚至跳楼的可能,而开发人员最多换个老板而已。
小编做了一个尝试,在APP【小米圈】里面建立了一个付费圈子(因为付费是对知识的尊重,也是一个很好的过滤器),专注于分享电子技术方面的优质内容,帮助我们电子工程师过滤掉无效信息,提供一个有价值内容交流的场所。
欢迎加入我们。