当接受一个新项目的开发的需求时,首先确定该项目的整体功能模块,在项目设计过程中制作系统功能模块图。
- 分析系统的主功能模块,设计项目功能模块图
- 创建数据库模型
- 分配研发人员根据项目的功能模块确定模块负责人以及模块开发小组。
- 搭建框架,规范开发模式,统一页面布局
- 制定项目开发周期,迭代开发,每个迭代期初的任务分配、迭代期末的任务总结。
功能模块图
所谓功能结构图就是将系统的功能进行分解,按功能从属关系表示的图表。管理信息系统的各子系统可以看作是系统目标下层的功能,对其中每项功能还可以继续分解为第三层、第四层……甚至更多的功能。
功能结构图设计过程就是把一个复杂的系统分解为多个功能较单一的的过程。这种分解为多个功能较单一的模块的方法称做模块化。模块化是一种重要的设计思想,这种思想把一个复杂的系统分解为一些规模较小、功能较简单的、更易于建立和修改的部分,一方面,各个模块具有相对独立性,可以分别加以设计实现。
功能结构图主要是为了更加明确的体现内部组织关系,更加清晰的理清内部逻辑关系,做到一目了然规范各自功能部分,使之条理化。
示例:
微信的主功能模块:
模块功能图:
数据库建模
数据库的设计要遵循3NF范式,减少冗余数据。
第一范式:属性不可分
比如人员信息表,包括’姓名‘,’职业‘,’年龄‘等多个属性,在数据库设计中每个属性必须独自占有一列,不能把完整的一个人员信息放在一列里。
第二范式:必须先满足第一范式(1NF),唯一标识
一张表只能描述一样东西,每个表都要加一个不可重复的唯一标志。
第三范式:必须先满足第二范式(2NF),使用外键
假如数据库要存储人员及其部门信息(部门名称,部门主任,部门联系电话),则若在一个表中会导致部门信息大量重复,数据冗余,此时应将部门信息提取出来作为一个新表,部门表,然后在人员表里存储部门表id。
第四范式:同一张表里的多对多要提出关系表
第五范式:从最终结构重新建立原始结构
在某些情况下过于范式化甚至会对数据库的逻辑可读性和使用效率起到阻碍。数据库中一定程度的冗余并不一定是坏事情。
模块开发
项目经理A将团队成员划分为多个模块开发小组,例如B与D、E、F开发微信模块,B为模块负责人,C与H、I、J、K负责搜索模块,C作为该模块负责人。
当确定好模块负责人后,由模块负责人对所负责的模块中的具体功能进行细化,画出模块详细功能图 ,领导模块开发小组的其他成员进行功能开发。
示例:
开发规范
1、项目结构
原始项目结构:
每个模块开发小组开发时建立一个与模块相关的包,在该包下建立自身的bean、dao、service、controller,
例如:
注:
- 包命名:公司简称.模块简称.**
- pub为公共模块,提供可共用的功能方法,controller一般只会返回json字符串,不会涉及到页面跳转,更多的是提供工具方法之类。
- 每个模块不能调用除公共模块及自身外的其他模块内的功能方法以及工具类。只有公共模块的功能方法才能被共用。
2、类及方法注释
新建一个xml文件,复制一下内容,修改作者名。
<?xml version="1.0" encoding="UTF-8" standalone="no"?><templates><template autoinsert="false" context="delegatecomment_context" deleted="false" description="Comment for delegate methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.delegatecomment" name="delegatecomment">/**
* ${tags}
* ${see_to_target}
*/ </template><template autoinsert="false" context="typecomment_context" deleted="false" description="Comment for created types" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.typecomment" name="typecomment">/**
* @ClassName: ${type_name}
* @Description: ${todo}(这里用一句话描述这个类的作用)
* @author (作者)
* @date ${date} ${time}
* @version V1.0
*/</template><template autoinsert="false" context="gettercomment_context" deleted="false" description="Comment for getter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.gettercomment" name="gettercomment">/**
* @return ${bare_field_name}
*/</template><template autoinsert="false" context="fieldcomment_context" deleted="false" description="Comment for fields" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.fieldcomment" name="fieldcomment">/**
* @Fields ${field} : ${todo}(用一句话描述这个变量表示什么)
*/ </template><template autoinsert="false" context="overridecomment_context" deleted="false" description="Comment for overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.overridecomment" name="overridecomment">/* (非 Javadoc)
* <p>Title: ${enclosing_method}</p>
* <p>Description: </p>
* ${tags}
* ${see_to_overridden}
*/</template><template autoinsert="false" context="filecomment_context" deleted="false" description="Comment for created Java files" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.filecomment" name="filecomment">/**
* @Title: ${file_name}
* @Package ${package_name}
* @Description: ${todo}(用一句话描述该文件做什么)
* @author (作者)
* @date ${date} ${time}
* @version V1.0
*/</template><template autoinsert="false" context="methodcomment_context" deleted="false" description="Comment for non-overriding methods" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.methodcomment" name="methodcomment">/**
* @Title: ${enclosing_method}
* @Description: ${todo}(这里用一句话描述这个方法的作用)
* @param ${tags} 入参
* @return ${return_type} 返回类型
* @author (作者)
* @throws
* @date ${date} ${time}
* @version V1.0
*/</template><template autoinsert="false" context="settercomment_context" deleted="false" description="Comment for setter method" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.settercomment" name="settercomment">/**
* @param ${param} 要设置的 ${bare_field_name}
*/</template><template autoinsert="false" context="constructorcomment_context" deleted="false" description="Comment for created constructors" enabled="true" id="org.eclipse.jdt.ui.text.codetemplates.constructorcomment" name="constructorcomment">/**
* @Title:
* @Description: ${todo}
* @param ${tags} 入参
*/</template></templates>
eclipse打开顶部菜单栏Window下的preferences,导入配置的xml。
选中类名或方法名后,使用快捷键 ALT+Shift+J
使用效果:
前台布局见:https://blog.csdn.net/lxy316316/article/details/89672635
制定项目周期,迭代开发。
团队开发最重沟通,不可能一个人把所有的事情安排的面面俱到,积极沟通,群策群力,集思广益,博采众议,才是一个团队稳定高效发展的策略。
A确定该迭代期要完成的任务计划,然后与模块负责人探讨,进行本迭代期任务的划分及分配。在迭代周期结束时,对所安排的任务计划进行总结,主要是对于已完成的工作,在开发过程中产生的好的想法、以及未完成工作的原因及遇到的瓶颈。
一些开发过程中需要注意的小问题:
- form表单中的按钮必须都指明按钮类型。不指明的话会默认点击后提交表单。
- 正则表达式要合适。