软件设计的核心方法及实例解析

news2024/10/7 12:26:11

李连杰电影版《倚天屠龙记》里有个经典的名场面,祖师爷爷张三丰花了三分钟教张无忌太极拳,张无忌学成打败了对手。三丰爷爷的教学思路是这样的:爷爷演示太极拳让张无忌跟着练,边练边问张无忌记住了多少,等张无忌把所有的招式全都忘记了,就算出师了。

这和工作中一样,实际上做事需要处处体现章法,但是大家却不会经常把某事某事用到什么方法论挂在嘴边。都已经是内化了自然而然的思路。就好像边打架边念叨:白鹤亮翅、双峰贯耳…… ,说明还在一个初级的阶段。但是反过来是不行的,之前面试过一个高阶人员,问他什么什么事情是怎么处理的,有什么方法和原则。他回答全凭经验。这就好像不会功夫的人打架一样,和绝世武功内化成无招胜有招有天壤之别。

咱们来回顾一下一些经典的原则,然后用实例讲解这些是怎么内化成做事章法的。

面向对象的七大原则如下图,想了解SOLID原则的具体内容,可参考我之前写的《架构之思-分析那些深入骨髓的设计原则》:

3b3cb739a006697678862f35d29db731.png

还有大家常常挂在嘴边的:高内聚低耦合,模块化、分层架构、积木化。其实这些原则核心就是:分解和组合。

在《righting software》这本书中,方法被定义为

方法=系统设计+项目设计

df81e7ab70fc83df05c2c6428abe73a4.png

顺便说一句,我这半年没怎么写文章,这段时间我把英语能力提高到了雅思7.5的水平,没有实际参加考试,在家自测的。现在看英文书籍真流畅。

系统设计是总体蓝图,项目设计是系统设计的分解,还是一样的思想。下面来看这个思想怎么用。

假如咱们是做金融收单的。就是说咱们的业务是上游有人请求咱们,咱们把请求的数据落库,落库的数据就是单据。然后咱们请求下游进行实际处理。

刚开始的时候,咱们只对接了支付宝,开发小哥哥快速上线,把系统做成了这样:

a399097a3a238bc246a469135d391830.png

开发小哥哥是有分层的,但是没有考虑扩展。一旦对接方发生变化,比如增加了微信支付。但是支付宝量已经比较大了,怎么办呢?老系统放着不动,新设计一个扩展性更强的,承接新业务。或者一开始设计成这样:

a5837d02b12c75e654528f21ee57c9ac.png

增加微信的话,就好办了:

f96d76db1d9abf04ec56c28554157447.png

设计成标准接口,接口是更面向核心的,要想清楚我要什么,而不是别人有什么。想想迪米特法则,支付宝是一个实例,接口定义要减少对实例的依赖。同时接口要满足开闭原则,对修改关闭,但是可以扩展成对接多样化的下游。

咱们的业务越做越大,下游增加了人行。人行不同于微信和支付宝的http接口,它用的是MQ。设计就变成了这样:

d80141fabd90af0b22c971f7ec30cdcb.png

这时候客户提出了需求,我原来是对接支付宝的,我不愿意太多改动,就想换个接口地址了事。因为这是个战略性的大客户,得满足啊。所以设计就变成了这样:

e9474cd4a93c26c41739916a8759fbe0.png

业务越做越大之后,数据要进行分析、清洗,又要购买一批设备了。而之前这一整套处理主要在通信,是IO密集型的。而数据处理主要耗CPU,怎么能有效利用资源呢?逻辑上不能耦合了,物理上可以有效利用,这就用到了容器技术。

以上是简略示意项目设计怎么演变成系统设计的。在公司里,可能没有人要求你这么做,但是想做好必须要做的事就是尽量多的去了解大的架构,部门的、事业群的、整个公司的。利用逆向工程自己做出尽量大的架构图。

咱们在一步步扩展的过程中,最初的模块改动很少,一般是在外围做扩充。这也是公司发展的一般思路,核心就是分解和组合的模块化思想。

之前有人说的:面试造航母,工作拧螺丝。实际老板并不希望你拧螺丝,而是希望你把自己的模块做好之后,来cover更大的模块。很多时候人自身的发展取决于对自身的定位。

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

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

相关文章

网络系统安全——MS15_034漏洞利用与安全加固

Kali 192.168.124.162 Windows server 2008 192.168.124.169 检查2008服务器的IIS网站是否正常,进入2008服务器,使用ie浏览器访问本机地址 切换到kali,使用命令ping来测试他们的连通性 然后使用使用命令curl测试,测试&#x…

FTP协议,带你了解FTP协议

目录 一、FTP的概述 1.FTP的理念 2.FTP数据连接模式 3.连接模式分类 4.主动和被动模式的工作原理 二、配置FTP服务 1、配置匿名用户FTP服务 1. 1安装FTP服务器软件 1.2 配置FTP服务器 1.3 重启FTP服务器 1.4 测试FTP服务器 2.关闭防火墙安装vsftpd软件包 3.开启FTP…

单片机中移植lua解释器

一、基本开发环境 开发环境基于野火STM32开发板。 前测试的 Lua 解释器版本为 5.4.2。 官网下载lua资源包,下载地址如下: https://www.lua.org/ https://github.com/rjpcomputing/luaforwindows/releases lua: Lua 国内镜像 (gitee.com)‍ 二、移植Lua解…

AIGC数据库工具-阿里开源Chat2DB

前言 今天无意间发现了一个AIGC数据库工具,chat2DB,重点!!!阿里开源,其设计产品的思想给了我很多灵感,故记录一下,并分享给大家。 概述: Chat2DB 是一款有开源免费的多…

驱动开发:内核RIP劫持实现DLL注入

本章将探索内核级DLL模块注入实现原理,DLL模块注入在应用层中通常会使用CreateRemoteThread直接开启远程线程执行即可,驱动级别的注入有多种实现原理,而其中最简单的一种实现方式则是通过劫持EIP的方式实现,其实现原理可总结为&am…

【C++】入门基础知识详解(二)

目录 一、内联函数 1、概念 2、特性 3、内联函数与宏的优缺点 二、auto关键字(C11) 1、auto 简介 2、auto的使用细则 2.1 auto与指针和引用结合起来使用 2.2 在同一行定义多个变量 3、auto不能推导的场景 3.1 auto 不能作为函数的参数 3.2 auto 不能直接用来声明数组 三、…

英语中如何描述五颜六色

前言 如何用英语描述五颜六色,看完这篇文章,你就学会了 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家 😉😉 💕 …

Axure RP 9 基础教程 元件基础2

第一章:Axure RP 9的元件(2) 6、改变元件的位置 要改变元件的位置,只需要拖动对应的元件即可。另外也可以在顶部快捷样式菜单中设置坐标值,然后按回车键,让元件移动到指定位置。 X轴是横轴,改变可以调整左右的位置。 Y…

技术科普与解读:ChatGPT 大模型硬核解读!(一)家族历史从GPT-1到ChatGPT

多模态,指的是融合文本、图像、视频或音频等多种模态作为输入或输出。 GPT-4是严格意义上的多模态模型,可以支持图像和文字两类信息的同时输入,输出为文本。从学术界的分析来看,无论是知识/能力获取还是与现实物理世界的交互&…

【应用安全架构】什么是联合身份管理?

介绍 联合身份管理是一种可以在两个或多个信任域之间进行的安排,以允许这些域的用户使用相同的数字身份访问应用程序和服务。这称为联合身份,使用这种解决方案模式称为身份联合。 联合身份管理建立在两个或多个域之间的信任基础之上。例如,信…

如此有艺术感的AI生成式二维码,你肯定没有见过

这是一张很常见的图片,要说有特殊的话可能是由 AI 来生成的,其它并无特别之处。但给它加上三个定位点后,这张图就变成一个可以扫描识别的二维码: 真的假的?不信你长按图片识别一下!我一次看到时&#xff0c…

基于Hexo和Butterfly创建个人技术博客,(8) 博客网站butterfly主题UI框架美化

Butterfly官方网站,请 点击进入 说明: 此文中的设置并不影响网站的整体,只是一些视觉上的调整,可以按需调整。 本章目标: 掌握butterfly主题的配置,优化UI样式 一、特效 1、过场动画 在每个页面打开前会有…

干货!具有三维感知的换脸算法

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 作者介绍 李逸轩 上海交通大学2022级硕士研究生,研究兴趣主要是三维人脸生成 报告题目 具有三维感知的换脸算法 内容简介 AI换脸旨在将一张给定目标图片中的人脸五官替换成源图片中的另一个人&#…

操作系统中的进程调度与优先级算法:理论与实践探索

前言 在计算机科学领域中,进程调度是操作系统中一个重要的组成部分,它负责决定哪个进程能够获得 CPU 的执行权,以及如何合理地分配 CPU 时间。通过合理的进程调度算法,可以提高系统的性能和响应能力。在本篇博客中,我…

ubuntu开发环境

boost介绍 Boost是一个广受欢迎的、开源的C程序库集合,提供了许多高质量和可重用的组件,涵盖了广泛的领域,如容器、算法、函数对象、日期与时间、正则表达式、文件系统、线程等。Boost旨在通过提供开发人员友好的C工具和组件来增强C的功能。…

阿里云主机详解:ECS/轻量/虚拟主机/GPU/裸金属/云电脑详解

阿里云云主机分为云虚拟主机、云服务器ECS、轻量应用服务器、GPU云服务器、弹性裸金属服务器、专有宿主机、FPGA云服务器、高性能计算E-HPC、无影云电脑等,阿里云百科来详细说下阿里云云主机详解: 目录 阿里云云主机 云服务器ECS 轻量应用服务器 云…

博泰应宜伦:把Vision Pro放大二十倍,就是未来汽车的终极形态

作者 | Amy 编辑 | 德新 新能源是上半场,智能化是下半场。 而随着智能汽车发展,智能座舱也不断革新,过去智能座舱的各项功能全面开花,竞争愈演愈烈,未来的座舱将如何被定义? 6月15日,博泰车联…

微信小程序手机号授权登录

文章目录 小程序端服务端注意事项 微信小程序,手机号授权登录需求。 大体流程是这样的: 小程序端使用 getPhoneNumber 向微信平台获取授权通过微信授权后,小程序端接收微信授权后的回调小程序携带微信的回调请求自己的服务端服务端请求微信获…

QML 模型和视图

模型/视图架构简介 使用 QML 时,有些情况下需要使用模型视图结构显示一些列表等控件,比较好的方式是用 Python 接管数据模型部分,方便处理数据;QML 和 JavaScript 负责前端部分,实现前端和后端的分离。 MVD 简介 Mo…

C# 特性(一)——什么是特性

目录 什么是特性 Serializable DllImport Obsolete Conditional Attribute类 自定义特性 AttributeUsage的使用例子 特性非常常见,官方解释为: 特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法…