十一休假,杭州西湖边逛了一圈只能用人山人海来形容,浙大紫金港校区也逛了一圈风景如画,建设得真不错很棒,假期就去了这2个地方,然后在家里陪老婆、看孩子、洗尿布、打了几局星际争霸,在网上接了一个B/S架构的内部管理类定制软件、淘宝上收了600元辛苦费后就开始行动了、现在把整个开发过程讲解分享如下文。
客户需求
一个简单的项目管理信息的,添加、删除、编辑、查询等功能的实现,把大的框架做好就可以,细节他会自己完善好,想想也很简单的一样,本以为1天时间就足可以搞定了,结果足足干了3天才算竣工,由于客户也是软件开发人员,沟通起来也比较顺畅一些,否则可能不止需要3天了。
项目虽然很小,但是由于跟我的主营方向是一致的,同时也想锻炼一下做项目的成熟程度有多高、有多快,所以也没嫌弃钱多钱少,开开心心就把这个项目开始启动了。项目虽然小但五脏俱全来形容了这个活儿了。
很多必要的功能虽然在需求里没有提到,但是都是需要做好的,例如:
01:系统的登录功能、这个是必然要有的。
02:记住密码功能,而且是需要有加密功能的。
03:退出系统的功能,总需要能安全退出系统的吧。
04:用户管理功能,例如哪些用户才能登录到系统里来?
05:用户修改密码功能,停用功能,设置密码功能等。
06:用户可以访问那些菜单等?
07:用户有哪些操作权限等?
08:角色管理功能,用户角色关系功能,角色的权限功能。
09:友善的菜单导航功能。
10:没有权限的友善提示功能。
11:附件的管理、上传、下载、删除等等。
12:查询分页功能等等,虽然都没提出,但是这些功能都需要做好的。
整体开发思路
数据库分2个设计:业务数据 + 权限数据,互相不干扰,相互比较独立一些。
整个系统分3个种干系人: 开发人员 + 系统管理员 + 操作人员,他们对系统各自的期望值及操作的内容如下图。
为了快速搞定项目,毕竟项目的预算很有限,所有有些功能模块能不开发就不开发,那我们就用现成的成熟组件,通用权限管理系统,做为用户账户管理、权限管理
菜单管理的核心组件,这样可以大大的提高工作效率,可以灵活配置管理这个小型B/S项目信息管理系统了。
项目的具体开发制作步骤
步骤1:项目虽然很小,但是还是按规范的软件开发步骤比较好,我们还是本着先有设计后有开发的思路,先不急着写代码,我们先把数据库结构设计好,本系统应该只设计一个表就可以了,我们先要想好哪些数据用什么格式保存,都需要哪些字段来表示各种属性,效果图如下,我们用了数据库建模工具PowerDesigner,来设计我们的业务模型中的数据模型吧,这就是所谓的开发上的领域模型吧,其实这个设计还是蛮关键的,设计乱了后面都会乱套了。
步骤2:通过用设计好的模型,我们先手工建立相应的数据库及数据表。
步骤3:下图是已经建立好的数据的效果图,Project是业务数据库、Project表是项目信息表,后面的Base_Sequence 用于产生序列及唯一排序号、Base_Comment 用于修改记录保存功能,这些不用重复设计,直接从UserCenterV30数据中心里复制过来结构就可以了,为了在软件里显示一些数据出来,可以通过手工方式先录入一些演示数据,这样成就感会更多一些、信心也更足一些,因为很快就可以在软件里显示数据出来了。
步骤4:生成好相应的数据表后,可以用代码生成器生成一些没有多少商业逻辑的代码了,所谓的添加、删除、修改、查询的代码都不用写了,直接用代码生成器生成好就可以了,虽然这个技术不怎么先进,但是省事省心,对技术的要求也很低,生成好的代码也比较规范一些,而且还支持多种数据库,还是蛮好的,若生成好后,数据库结构有变化了,也没关系,重新生成一下就可以了,生成代码1分钟足够了,顶多是命名空间可能需要整理一些就可以了,属于是很经得起折腾的做法了。
步骤5:将生成好的代码,复制到相应的位置上,适当的修正一下命名空间什么的,因为是一个很小的项目,根本不用分层啥的,分那么多层也是多余的,其实分目录就足够可以了,若很懒惰的话目录都可以不用分了,分层其实更适合大型软件项目,小项目以见效最快为主,没必要搞个7-8个层,这里是是1个层也没分,只是分了一些目录,显得思路更清晰一些。
步骤6:代码生成器不能生成所有的代码,有些代码还是有商业逻辑的,需要人工编写,其中ProjectManager.cs 中的代码就是有具体商业逻辑的代码,这部分代码无法靠代码生成器自动生成好,需要按自己的需要进行编写的,这里有2个功能,一个是查询功能的实现、另一个是更新数据时需要有修改记录的功能,需要详细记录数据被变更的全过程,这些代码都需要人工编写好,页面上会调用这些代码。
步骤7:接下来该是规划整个系统的菜单的时候,需要好好规划一下软件的菜单,到底需要有哪些菜单,都叫什么名字?当然这一步也可以在在最后做,我们同通用权限管理组件可以灵活规划整个系统的菜单,基本上想怎么设置就怎么设置,想怎么托摘、想怎么排序都可以,规划菜单时会很爽,当然不只是开发人员用起来爽、而且系统管理员今后维护时也会很爽,系统的整个菜单都可以灵活配置权限、可以灵活更改,而不是写死的菜单,将来不依赖开发人员也可以灵活配置管理,灵活设置各种权限限制等等。
步骤8:接下来,需要把相应的添加、修改、查询、删除功能页面做出来,可以考虑到今后可能会扩展很多模块进来,所有目录规划得合理一些,说不定还要做人事管理、考勤管理、薪资管理、工作日志管理等等很多模块,其实都是大同小异而已,更多是技术是体现在细节功能及业务逻辑的深入程度上。
步骤9:菜单配置好,页面制作好后,就可以实现登录系统的页面了,当然这个也是用了现成的通用权限管理系统的登录页面,只需要制作一个登录界面,然后调用相应的登录API就可以了,自然就可以达到离职人员不能登录、没有权限的用户不能登录、停用账户不能登录,不能重复登录、限制登录的IP地址等等额外的其他功能都可以集成在里面了,开发人员也不用关心更多的细节,省心省事了。
步骤10:登录好后,通用权限管理系统的底层API,自然会显示有权限的菜单,无权访问的菜单也不会出来了,哪个用户可以访问哪个菜单等等,都可以通过通用权限管理工具灵活配置管理,当然那个工具是给系统管理员、开发人员、实施人员使用的,并不是为了给普通业务操作员使用定位的。软件的最终运行效果就如下图了,由于是系统管理登录的所有菜单都能显示了,当然这里还需要一个成熟稳定的分页组件。
底层代码生成器生成的代码,可能只占用这个系统的代码的 1/3左右,但是编写这些代码的时间也省了,整个开发过程不是可以节省1/3了,而且是纯体力劳动而已。整个权限管理等可能需要整个系统开发的1/3左右的精力,若这部分也不用开发了,又可以节省整个软件项目开发的1/3时间。整个框架的稳定完善,也可以说是占用整个软件开发项目的1/3时间是应该的,若是2手空空开始开发的话。
那我们的项目采用了 代码生成器 + 数据库访问组件 + 通用权限组件 + 成熟的B/S开发框架 足足可以节省一个管理软件项目开发的 2/3 的开发时间,可以把精力全部放在另外的 1/3 的业务逻辑优化、界面细节优化上。
这样也大大的降低了软件项目的开发的失败风险,谁说你不会在前面的2/3时间上失败呢?未必能走到后面的1/3时间上来啊,对吧。
开发总结
目前3天内搞定一个独立的内部管理系统,而且五脏俱全的是我从业10年左右的最快记录,当然若第二次做类似的东西,可能有希望2天内可以搞定了。
经过多年的积累,手上才会有一个运行稳定、可以灵活配置的B/S开发架构,虽然看看都很简单,但是最起码不断完善几年后,才会达到铜墙铁壁的程度,我们经常会发现,开发一个小小的软件,往往1个月也开发不完,很可能是由于没有稳定的B/S开发架构导致的,这个架构也不是说技术,就是一个美观的整体效果良好的运行稳定的B/S系统吧,从头开发的B/S架构,由于需要调整很多细节环节、特别是页面、菜单的美观设计等上会耗费很多精力。
有时候界面设计良好、程序思路严谨、用户交互效果好的B/S空框架也能卖出几万元,以前不能理解,现在是彻底能体会了,稳定的B/S架构的确可以值一些钱,因为是经过精雕细刻后才能形成最后的劳动成果的。
软件的大体效果做到这里,大概花费了3天时间、接下来可能要花费的时间会更多,应该不止3天了,可能是30天,因为很多业务上的细节会耗费很多时间来调整,例如新增页面的先后输入的内容,页面输入的检查、页面的美观设计、光标的顺序优化、回车优化,输入内容的完善补充等等,查询页面的排序顺序优化、查询内容的先后顺序排版、表格中各列的宽度调整,一些提醒颜色的优化等等会有很多细节问题上还要耗费很久时间的, 做软件其实就是做细节,你需要有一个良好的B/S开发框架,否则全部自己弄,不知道什么时候才能弄好,有个良好的框架、再有良好的例子程序,整个管理系统,就是一个量的问题了,其次就是很多细节的优化上,会花费很多时间。
有良好的稳定的B/S开发框架,前期工作只用了3天,若没有这个,从头开始做,可能30天也做不完,更不会把大多精力都花费在业务逻辑的细节优化上,可能更多的精力都耗费在B/S系统架构的稳定、优化上了,那这个软件的质量就更没保障了。
有了稳定的B/S开发框架后,才好进行大规模生产、大量招聘人员做开发工作,若这些都没有,招聘来一大堆开发人员,那很可能局面就乱套了,大家就容易乱来了。
ProjectManager.cs手工编写的商业逻辑代码如下:
// All Rights Reserved , Copyright (C) 2010 , Jirisoft , Ltd .
//------------------------------------------------------------
using System;
using System.Data;
using System.Data.Common;
using System.Collections.Generic; namespace Project
{
using DotNet.DbUtilities;
using DotNet.Manager;
using DotNet.Utilities;
using DotNet.Business;
/// <summary>
/// ProjectManager
/// 项目跟进表
///
/// 修改纪录
///
/// 2010-09-28 版本:1.0 JiRiGaLa 创建主键。
///
/// 版本:1.0
///
/// <author>
/// <name>JiRiGaLa</name>
核心技术类目
Java
VPN
Android
iOS
ERP
IE10
Eclipse
CRM
JavaScript
Ubuntu
NFC
WAP
jQuery
数据库
BI
HTML5
Spring
Apache
Hadoop
.NET
API
HTML
SDK
IIS
Fedora
XML
LBS
Unity
Splashtop
UML
components
Windows Mobile
Rails
QEMU
KDE
Cassandra
CloudStack
FTC
coremail
OPhone
CouchBase
云计算
iOS6
Rackspace
Web App
SpringSide
Maemo
Compuware
大数据
aptech
Perl
Tornado
Ruby
Hibernate
ThinkPHP
Spark
HBase
Pure
Solr
Angular
Cloud Foundry
Redis
Scala
Django
Bootstrap
- 个人资料
- 访问:478679次
- 积分:12985分
- 排名:第193名
- 原创:578篇
- 转载:395篇
- 译文:0篇
- 评论:2712条
- 文章搜索
- 文章存档
- 2010年11月(251)
- 2010年10月(280)
- 2010年09月(156)
- 2010年08月(16)
- 2010年07月(10)
- 2010年06月(9)
- 2010年05月(37)
- 2010年04月(23)
- 2010年03月(5)
- 2010年02月(1)
- 2010年01月(7)
- 2009年12月(8)
- 2009年11月(11)
- 2009年10月(2)
- 2009年09月(17)
- 2009年08月(10)
- 2009年07月(17)
- 2009年06月(24)
- 2009年05月(20)
- 2009年04月(9)
- 2009年03月(1)
- 2009年02月(14)
- 2009年01月(1)
- 2008年12月(1)
- 2008年11月(9)
- 2008年10月(6)
- 2008年09月(4)
- 2008年08月(3)
- 2008年07月(1)
- 2008年06月(20)
- 阅读排行
- 技术水平的确很高,正规公司为什么还是不录用这些人(技术水平不高的更不可能)(42440)
- 我心目中的牛程序员、我们可以对比看看(人家还是看多年朋友面子上才肯帮忙1周,至少需支付1万元辛苦费)(24074)
- 软件编程走火入魔之:女人的脸,男人的代码(18430)
- 程序员你12点前睡觉了吗?(18391)
- 程序员找老婆 -- 相亲节目引发的一点思绪(14796)
- 去年这时候又辞退了一个老油条,不知道他现在是否在开公司了,可以对比一下混工资的水平(14265)
- 什么样的技术人员更容易接到软件开发项目?(论干私活儿)(11665)
- 【顶】辞职也需要辞得帅,辞得大家都开心,多为将来考虑,辞职不要急,本是好事要办好(8814)
- Java团队+.NET团队==足球队+篮球队;我们能否同时培养好2个优秀的精英团队?(7824)
- 程序员需要更强的沟通协调能力-对普通员工、有效的沟通能力可能比技术能力更重要(6569)
- 评论排行
- 技术水平的确很高,正规公司为什么还是不录用这些人(技术水平不高的更不可能)(780)
- 程序员你12点前睡觉了吗?(263)
- 我心目中的牛程序员、我们可以对比看看(人家还是看多年朋友面子上才肯帮忙1周,至少需支付1万元辛苦费)(249)
- 程序员找老婆 -- 相亲节目引发的一点思绪(167)
- 软件编程走火入魔之:女人的脸,男人的代码(167)
- 去年这时候又辞退了一个老油条,不知道他现在是否在开公司了,可以对比一下混工资的水平(100)
- 程序员需要更强的沟通协调能力-对普通员工、有效的沟通能力可能比技术能力更重要(95)
- 什么样的技术人员更容易接到软件开发项目?(论干私活儿)(87)
- 10年磨一剑,软件编程走火入魔之:把简单的功能做个彻彻底底、把劳动成果重复利用(75)
- Java团队+.NET团队==足球队+篮球队;我们能否同时培养好2个优秀的精英团队?(70)
- 推荐文章
- 最新评论
-
【顶】辞职也需要辞得帅,辞得大家都开心,多为将来考虑,辞职不要急,本是好事要办好
angus_17:
呵呵,本来是搜网新易盛搜到这的,看到楼主写了这么多金玉良言,不得我佩服,也一定要留言,谢谢了。 -
(03) 需求征集 -- 角色管理
axe2007:
老大,你下载个“Excel服务器”用用它的后台,然后再打开相应的数据表看看,我觉得这个是很值得我们学... -
(02)权限系统数据库总体规划
axe2007:
我也正在做这方面的努力。既然是通用的,那么当然允许别的系统继承或很方便调用这套权限系统,但是我又不希... -
SAP的程序用客户端连接正常,用C#连接死活连不上问题的解决
tomsyc:
太感谢了!搞了半天也没找到原因。幸好看到了你的文章! -
薪资管理模块,经常会遇到的40几个问题汇总
lijgknspt:
第二十条的所得税打成说得税。写的问题很好,值得学习哇 -
薪资管理模块,经常会遇到的40几个问题汇总
lijgknspt:
我的天、这个薪资我自己做、什么时候能做完- - -
【顶】辞职也需要辞得帅,辞得大家都开心,多为将来考虑,辞职不要急,本是好事要办好
Xiao_Lning:
说得好,学习学习。感谢楼主 -
【顶】辞职也需要辞得帅,辞得大家都开心,多为将来考虑,辞职不要急,本是好事要办好
linkuncha0:
看完收获不少,心态也平和了不少!谢谢^_^ -
【顶】辞职也需要辞得帅,辞得大家都开心,多为将来考虑,辞职不要急,本是好事要办好
kafei_kings:
楼主真英明!拜谢!! -
【顶】辞职也需要辞得帅,辞得大家都开心,多为将来考虑,辞职不要急,本是好事要办好
Blocksom:
很好,受教了!