三、如何开发
经过前2章节我对你的“洗脑”,似乎觉得打开IDE,可以潇洒的写出那些业务代码。你先不要着急,写代码只是最后一步,先了解一下HIT软件典型的构成。首先根据我个人习惯把HIT软件拆成5大部份,基础数据表、业务数据表、基础数据维护模块、业务实现模块,为了方便理解,我画了一张图,放在下面。
HIT软件构成了解5大部件,接下来我们来看怎么生产一个HIT软件,首先有一个工序流程,先打“地基”,再盖房子,“地基”主要指是数据库表设计,首先搞清楚,要保存哪些数据才能让业务流动起来,我们俗称后台数据流。这样子说比较抽象,为了我们便于理解,我拿一个比较简单的业务来举例说明,假设你现在开发的是一个医生排班管理系统。我至少需要基础数据表:医生表,班次表;业务数据表:排班表,才能让业务流动起来。
后台数据流现在到了盖房子的阶段,首先实现“业务实现模块”,"基础数据维护模块"搞出一个最小化可用的系统,交付给用户上线使用,这里我们强调一下,为什么说是最小化可用系统,就可以去交付了,在这里我不做过多叙述,留在下一章,我会详细跟你探讨。
经过上面的描述,我以一个“最简洁”方式向你展示,一个HIT软件最简单的生产制造过程。既然说的是软件开发,还是非常专业的,我们现在来切换频道,用一个非常专业的视角如何来做软件开发。不管在别的医院参观学习,或者软件公司来介绍软件,大部分的时候要拿出来一张“系统架构图”给你看。如果你能把所有的软件架构图搜括拿过来看,你会发现它们有一个共同的特点叫做“分层”,我请你在脑子里记住这个最重要的概念“分层”,这个解耦系统复杂性特别重要手段。比如我们的互联网如此美妙,离不开一个TCP/IP体系结构,如下图所示。当我们遇到一个网络的世界的问题,我通常怎么处理。首先判断这个问题,是在哪个层上面出现的,比如说ping不通,可能是网上松了,这个是物理层的问题。所以我们在学习“系统架构”的时候,最主要的关注点,哪一层解决了什么问题,再逐步建立起整个大厦。
TCP/IP体系结构 构架图软件开发设计当中,你听说过二层、三层架构,正是体现这种“分层”思想。接下来,我们来简单回顾一下,软件开发设计最经典的MVC模式,是模型(model)-视图(view)-控制器(controller)的缩写。怎么快速的理解MVC?M有人说你就把当成数据库表,这样的表述不准确。M可以理解提供数据的模块,假设你在M层代码里面只写了一句话“return "123"”,这也是在提供数据;C可以逻辑控制代码;V可以简单理解为展示界面。我了解这么多,现在可不可以开发,我还是会拉着你先等等,先了解DRY 原则再说(Don’t Repeat Yourself),直白话“不要重复造轮子”。提到MVC,世界上很多大牛已经帮你开发好的框架,拿来就用。比如java的spring,php的thinkphp,python的Django。
说起框架, 我们顺便回顾一个重要知识,依赖反转原则,抽象不应该依赖细节,细节应该依赖于抽象。高层模块不应该依赖于底层模块,都应该依赖的抽象。什么意思,Tomcat 是运行 Java Web 应用程序的容器。我们编写的 Web 应用程序代码只需要部署在 Tomcat 容器下,便可以被 Tomcat 容器调用执行。按照之前的划分原则,Tomcat 就是高层模块,我们编写的 Web 应用程序代码就是低层模块。Tomcat 和应用程序代码之间并没有直接的依赖关系,两者都依赖同一个“抽象”,也就是 Sevlet 规范。Servlet 规范不依赖具体的 Tomcat 容器和应用程序的实现细节,而 Tomcat 容器和应用程序依赖 Servlet 规范(这段内容,摘自极客时间,王争,设计模式之美专栏)。
数据库表设计这一块,我不展开细节,相对来说比较简单,但是有注意点,我有一篇说了,请参考“如何看待合理的HIT数据库表结构设计”。现在你终于打开IDE动手开始写代码了,我之前提到过一个问题,为什么你先要先开发“业务实现模块”,因为实现业务是一个系统的灵魂,而且你在实现实际业务的过程中,你会发现原来的数据库表设计不够合理,需要重新调整,其他模块逐步补上。具体写代码,这是一个程序员的基本功,在此不展开讨论。现在大家都谈数据治理,大家开发设计的时候,尽可能多使用标准字典来组装你的软件 ,如果采用web开发,请你还要特别注意安全问题,比如XSS,SQL注入等等问题,在软件设计时就规避,尽可能使用国产密码算法SM1,SM4,可能到时候等保要求。web技术还有一个问题,客户端浏览器的环境不稳定,导致出现各种问题,我建议有技术实力的开发,自己封装一个浏览器内核的客户端,在这个客户端访问web应用,我曾在连州市人民医院看到有这种做法,pacs系统封装了浏览器内核,客户端环境就变得可控稳定。
最后我想和你探讨一下,如何让你的软件系统具有高性能?我拿信息科自己举例,假设我现在把你信息科全部的人清空,就剩你一个,那就瞬间帮你模拟一个“低效率、低性能”的信息科。现在有一道问题摆在你的面前,怎么样提高工作效率?于是你向领导申请了招聘2个人,假设申请通过,你们有三个人。用一个计算机术语说就是你们组成一个“集群”。原来一个人干活,现在可以三个人干,按照计算机术语你们完成了“并发”。经过一段时间,你发现每个人都干所有活,我把他们分工一下,效率更高,于是你分了三个岗位,一个是硬件、软件、网络。就像软件系统里面进行了业务拆分,例如数据库读写分离。再经过一段时间,你还想把信息科的工作效率提升一下,怎么办?那就改进你的“工作算法”。假设你原来接到一个电话,你都要跑到现场去处理。现在你改变了一个方式,先在每台电脑上面安装了一个远程控制工具radmin,这你就不用跑现场,在电脑前面远程就可以了,时间复杂度n平方降至logN。比如我们在程序里面把同步调用改成了异步调用,使用线程实现并发,改成使用协程实现并发。经过这一系列的动作,你的信息科终于成一个“低性能”的信息科,变成了“高性能”的信息科。
网友评论