DDD-议题开篇

160 阅读4分钟

一、关于现实建模

    现在的软件工程发展的越来越快,我们理解现实中的业务形态,技术形态也越来约成熟,但是从现实走向计算机软件系统里却没有巨大的飞跃。作为开发工程师接到一个需求,或者作为科学家解析科学数据都需要用专门的工具进行软件需求设计,编码和实现。我们理解产品经理或者项目经理的一个职能就是将现实世界的问题通过产品文档,UI图,流程图等描述出来。然后开发工程师或者专家进行进一步的需求拆解处理,形成一定的数据结构。这里初步构建了一个对现实问题或者场景的解释。当然也慢慢让计算机更容易接受这个映射的过程。现在的计算机和互联网的发展细化了很多,软件工程的理论和实践也有很多。但是其核心却离不开对现实问题和场景的建模。比如计算机操作系统,导弹控制系统,天猫网站,12306网站。这些无论从前端还是后端,还是嵌入式都存在着其内在的模型。因此对业务问题,流程问题,数学计算这些都可以通过更高维度的抽象进行建模解决。

    在建模的过程中我们也从很多软件工程大师学到了一些,比如面向对象建模,面向数据结构建模,面向过程建模,面向数学建模等。建模工具也有很多,比如数据库领域的e-r图,UML图等。通过建模我们可以很快抓住问题的核心,并梳理其中的关系,比如组合,关联,聚合等。因此掌握建模工具,建模方法论可以帮助我们快速设计稳定的实现方案,并很快可以找出其中的缺陷。

二、关于系统工程

    现在的科技发展的很快,从中国历史上的地震仪到现在的地震预测系统,我们解决问题的方式变得更加高端了,在计算机里也逐渐发展出了更加专业的体系,比如硬件,操作系统,云计算,软件工程,网络,计算机科学与技术,嵌入式等等。这些都是关于计算机+互联网的系统工程。很多计算机领域的大牛通过理论和实践建立其软件开发,系统控制,工业机器控制理论体系。这些过程透露着下面的一些思维方式,比如系统化思维,工程化思维,矩阵思维,金字塔思维,象限思维等。通过软件工程开发出的各个软件服务和系统其实在很多人眼里并不能直观的感受到其内在的原理和运行机制。在多次变更和迭代过程中系统逐渐变得不可控,而这些不可控的因素展示的影响大多都是隐性的。当出现致命性影响的时候往往我们已经不能回头了,从系统工程和更高维度的角度去重新审视我们在系统里做的不同决策和改变时会有更多的收获。

    软件开发中很多服务,工程都可以作为一个子功能或者一个子系统。当我们进行集成的时候对全局的把握和感觉更加全面。

三、关于DDD

    上面两点说的内容主要还是引出本章要说明的主题,这就是DDD。在软件工程或者复杂系统设计中DDD可以帮助我们更好的利用建模方法,系统工程理论,思维方式进行系统构建和实施。在国内很多工程师在面临工期紧,任务重,团队合作复杂的场景,很少考虑分层架构,解耦合的方式。另外一方面DDD等一批开发理论从国外到国内进行传播的时候也遇到很多问题,概念很多,理解有门槛,缺少落地案例。因此很多人想了解或者想学却不好入门,但是学习DDD却能更好的对业务进行建模,对系统进行深入理解。

    我这边准备通过自己的学习和落地经验跟大家分享一些关于DDD相关的知识,因此今年会写一些DDD主题的公众号文章。欢迎大家关注。

shenshuaiXXXXXXX.png