以前听软件开发的老师讲的软件开发流程,也不是不以为然,只是觉得常规套路没太往心里去。
最近开始考虑开发的问题才意识到,学了这么多技术,de了这么久的bug最后拿到一个issue手还很生。
为什么要功能分析技术分析?为什么要把工序分出先后?这是我拿到一个看起来很简单的网站时才意识到的问题。
---------- -------------------- ------------ -------------- -------------- --------------------- | 功能分析 |->| 技术分析与功能设计 |->| 数据库设计 |->| 文件系统设计 |->| 页面功能实现 |->| 页面修饰与性能修饰 | ---------- -------------------- ------------ -------------- -------------- ---------------------
决定一个项目的质量和开发周期的往往是最开始的功能设计和技术架构设计。
1. 文件系统的规划
这一阶段容易埋下的问题往往不是技术上的问题,而是不必要或者规划错误导致延长开发周期,使得debug方法繁琐
- 使用Java还是PHP开发?这是根据项目的规模和功能结构决定的,JSP相对稳定,能够应对规模比较大的系统,开源程度高,通用性强;而PHP对轻量开发和大规模开发都有很好的适应。语法简单部署快捷,网上的资源和经验也比较多。
- Java开发系统中的DAO模式和Service模式,在调用DAO和ServiceImpl的时候对Entity的设计就比较重要。一般第一步是部署文件系统和Classpath等配置,对可能要用到的包进行部署后,节约后期大量的调试和维护成本。由于Java系统比PHP系统复杂,配置相对困难,前期的设定对开发周期和维护运营来说起着决定性的作用。
- PHP系统自由度更大,是否使用Laravel等框架是根据项目的规模和开发成本决定的,客户一般希望在开发和运营两个方面压缩成本,规模较大的项目借助框架以提升开发效率和维护成本,如果没有使用框架的必要强行上了框架,不仅会延长开发周期还会增加额外的开销。
- 以Ruby on rails为代表的新型Web系统,语法和效能无疑都是最先进的。但是要考虑的问题就是,相比于两大传统系统网上的资料不多,遇到开发和部署问题往往难以求助。同时采用新的系统和语言客户是否满意?会不会对以后的运维带来障碍?服务器开销好预测吗?不仅自己要对自己的技术足够自信,确定之后还要征求客户的意见。毕竟开发系统是满足客户的需求不是自己的需求。
- 采用什么数据库?一般来说自己做就是MySQL,团队做那就公司用什么你用什么咯。一般来说数据库这种类似于操作系统,如果没有相当可怕的壁垒和层出不穷的bug那就是先入为主,因为大家的功能都大同小异。即便先入为主的那个有点难用。非要说那个系统更优越?其实各有千秋。在保持各种功能都打通的前提下,选取最擅长的,在性能,成本,开发能力之间拿捏一个平衡,因为往往自己就是整个开发中最懂技术的人(相对而言),这些平衡其实最终影响到的还是自己.
2. 功能分析与技术分析
分析什么?这个阶段往往是在各种选取都定好了之后,环境都打通了,开始着手做具体的事情。影响到的主要是代码阶段
- 数据库、文件操作与视图之间的关系是首先要思考的,数据库设计网上最多的话题是效能。数据库设计阶段对代码的影响也是很大的,譬如Java的BaseDAO模块,PHP中require Conn_DB,用哪些函数?引用的方法是一次还是多次?哪些引用数据库接口可以合并并减小开销?其实合并功能化简功能的过程就是简化代码开发的过程,简化代码结构就简化了系统代码的复杂度,我看到别人的代码,有的时候就觉得自己坐井观天了,稍微用点优化的结构就觉得自己很了不起,看见别人一气呵成简单明了的过程,才发现很多问题是可以避免的,根本不需要解决。
- 在合并功能的过程中很重要的一点就是原则,原则往往是自己定的,比如,Qt中,头文件的成员都是指针,为什么?这在大公司的开发规范里也可见一斑,C++中把变量写得到处都是构造和析构将会难以控制,为什么使用service+impl的方案?这是隐式定义方法的一种技巧,调用都是Interface,实现都在Impl,他们之间的关系?交给Java自己去完成。原则还有一点价值在于,当你看到一个问题的时候:“我知道我不会这样写”,“这种情况按照我的习惯是不会发生的”,debug时自动砍掉了一些原则以外的范围。
3. 前后端分离开发方法
分离前后端不仅仅是让软件和系统结构化,还可以在开发的时候就简化各种功能的实现方法。
- 先实现功能,后美化。这是常规的软件开发套路。但是遇到的很多问题,比如前后端如何分离,一个函数又调用前端又调用后端,如何分离?这就是设计模式的功劳了。常见的模型其实老练的程序员也很难起出具体的名字,但是上手时就很敏感的觉得,应该这样写。我这方面理解的还不是很透彻,用Java还可以照猫画虎的写几个样板,换个场景可能就会开始糊涂。背下来只是第一步,开发过程中的实践,主要靠自己的感觉。
- 前后端是相对而言的,网站系统中,用户看得见的是前端,看不见的是后端,又说,数据库是后端,php接口是前端,再说,用户是前端,管理员是后端。因为前后端分离是功能单元划分的原则之一,在大的方向上进行隔离并拉出有限的接口,对该层次功能设计能够进行良好的控制。
时间: 2024-10-05 02:58:24