作者:金色海洋(jyk) 来源:博客园 酷勤网收集 2008-05-25
相信各位高手都会有自己习惯或者独特的写项目的方式,不知道是否可以拿出来和大家分享一下。
我先说一下我的,就当作是一块大砖头吧。
1、需求调研、分析
2、功能节点设计
3、数据库设计
4、使用“管理程序”建立数据库、表。
5、使用“管理程序”添加字段(包括表)的描述信息。
6、使用“管理程序”设置分页控件需要的属性和添加修改删除等使用的表名 。
7、使用“管理程序”设置显示、查询、表单、导出到Excel等使用的字段。
8、其他的不能套用“控件”的功能。
1、需求调研、分析
这个就不多说了。其实这个都是项目经理负责的,一般我都没有参与,只有做到细节的时候,而且在弄不明白的时候,才是我来直接问客户。
2、功能节点设计
根据客户的需求设计项目需要实现的功能,也就是功能树的内容。比如添加产品信息、维护员工信息等。这个是和“通用权限”挂钩的,内容会保存在 [项目—功能结点] 里面。这个表也是整个项目的核心,不仅权限、功能树会用到,后面的步骤也都是需要的。
3、数据库设计
这个我习惯使用 Excel来设计,看字段的内容是很方便的。当然看表关联还是有点困难,不过在设计的时候,表之间的关系都是在我的脑子里的。如果在设计之后能够及时补充一个关系图就可以了。
Excel的结构是这样的。
标识
序号
字段名
中文名
类型
大小
默认值
说明
关联字段
d01
0
Help_Info
帮助信息
cd01
1
InfoID
序号
int
4
n1
主键,自增长
cd01
2
FunctionID
节点ID
int
4
n1
cd01
3
Title
标题
nvarchar
100
_
cd01
4
Content
内容
ntext
16
_
cd01
5
ViewCount
浏览次数
int
4
n0
4、使用“管理程序”建立数据库、表。
上面的Excel 并不是写完了就“用不到了”,而是时时都会用到的。如果说表设计完毕之后,还要在SQL Server 里面手动键表,是不是很郁闷呢?于是我写了个小的程序(b/s结构的,以下叫做“管理程序”),这个程序可以读取Excel表里面的表和字段信息,然后生成 “Creat Table ” 这样的SQL语句,然后执行这个SQL语句就可以键表了。
表的主建、自增、默认值等,都可以“自动”生成。
[查看表和字段的信息]
[键表的SQL语句]
5、使用“管理程序”添加字段(包括表)的描述信息。
这个就有点特殊了。我需要做一个“映射”,就是要把字段和UI控件对应起来。
比如说有一个“人员姓名”的字段,那么这个字段在添加数据的时候使用哪种控件(文本框)?控件的描述(宽度、是否验证、最大字符数等信息)信息是甚么?就是说会有一个对应关系。
比如 “人员姓名”字段 要对应一个文本框,而这个文本框的宽度是10px,最大字符数(maxlength)是10,必填。“性别”字段要对应一个下拉列表框(或者RadioBoxList),要加入两个选项“男”、“女”。
做这些的目的,是要在“表单控件”里面使用。这个表单控件并不是系统带的那个,而是我自己写的。“表单控件”需要这些信息来自动描绘具体的控件(比如文本框、下拉列表框等),然后收集用户输入的数据、进行验证(前台的js验证,和后台的数据类型是否符合要求的验证),然后组合成SQL语句,通过“数据访问函数库”提交给数据库,当然也支持使用存储过程的方式添加数据。
[浏览页面里的按钮的设置]
6、使用“管理程序”设置分页控件需要的属性和添加、修改、删除等使用的表名 。
这个是给分页控件服务的,目的就是要给分页控件赋属性。还有就是记录一下,在添加、修改、删除的时候使用哪个表。
[设置分页控件的属性]
7、使用“管理程序”设置显示、查询、表单、导出到Excel等使用的字段。
只有第五步还是不够的,因为不知道哪个表单(页面)需要哪个字段,这里就是做这个用的。
简单的说就是,哪个表单需要哪个字段、谁在前面谁在后面、显示成一列还是多列、是否需要写点说明等。
类似的还有查询控件需要哪些字段(就是通过哪些字段来查询数据),使用什么查询方式(==''、like '%%'、between '' and ''、in (1,2,3))等,谁在前面谁在后面,拍成几列等信息。
当然还有有一个在列表页面里面显示哪些字段的情况,和上面也是类似的设置。最后就是如果需要导出到Excel文件的时候,也可以类似的设置。
[设置表单里需要的字段]
[设置查询需要的字段]
[设置显示哪些字段]
8、其他的不能套用“控件”的功能。
做完了以上几步之后,简单的单表操作都可以“自动”完成了。主从表的话,可以分成多个功能结点的方式来实现,就是表单页里面再加一个列表页面(子表、从表)。一次添加多个表的情况,可以使用存储过程的方式来添加。
这样项目的五成道八成都可以完成了。根据项目的复杂程度来定。
按照8/2原则来说,用两成的时间完成了八成的“代码量”,然后再用八成的时间去攻克两成的有难度的功能。
当然现在还没有完全的达到8:2 的比例。但是列表和查询已经非常的简单了,几乎点几下鼠标就可以完成。
对了,还要补充一下,目前我做的项目,还没有太多的业务流、审批流等,所以对这方面的支持还是很弱的。这个也没有办法,审批流这一类的都是使用OA里面的“自定义审批功能”来实现了。我也没有得到“炼手”的机会。
=============
这个只是一个抛砖引玉,先扔一块大砖头出来。相信大家都会有自己的工作方式和习惯,希望能够多多交流,取长补短,希望能够越具体越好。后面我会说一下我的表单控件的思路。
这里是没有是实体类的,但并不是绝对的没有(或者说是使用了实体类的思路),我把实体类分成了两个部分,一个部分变成了“字段和UI控件的对应”;另一部分根据具体的情况,在需要的时候才会使用,但是也不是只使用class 这种方式,也许会使用用户控件等方式。
我的总体思路是以面向过程为主,面向对象为辅。如果使用面向对象可以更好的实现功能的话,我才会使用。对于单表的CRUD,我觉得还是我的方法更快捷,更容易维护。
评论:
但如果拿excel设计数据库的话,如果在项目实现过程中,数据库的结构改变后,不知excel文档是否能保证和数据库结构同步。
不过我想在excel表中通过某些方法加入表之间的关系,或是一些字段的具体细节(光有中文名有时根据无法确定这个字段的具体功能,如是枚举类型,最好列出可取哪些值),这样更容易让人理解。
不对,是通过“管理程序”来操作,这个操作会先修改Excel文档,然后再修改配置信息,最后修改SQL Server数据库。
只是目前SQL语句还差一点功夫,通过SQL语句的方式只能增加字段,修改字段名称,其他的像修改字段类型、字段大小,还不知道要用什么样的SQL语句,所以如果是这样的修改,还需要手动修改一下数据库。
总之有修改的话,一定要改Excel文档,同步是一定要做的。
我和你的办法本质一样,只是我描述数据库用XML,“管理程序”是测试。:)
哈哈,每个人的思路各有所长各有所短。其实实现的东西是一样的,没啥大区别。
我的方法更多的是为手工编码提供一个支撑和模板,并不像代替手工的东西,主要是因为我开发的系统大都包含复杂的业务逻辑,能自动化的地方有限。
这个,市面上还没有卖的呢。只是项提供一种思路,解决问题有很多种思路的。
加几个图片,只是想能够具体一点。其实写程序,有的时候是可以不写代码的。
@冬冬
我对“复杂的业务逻辑”一直比较迷糊,在我看来80%以上的业务逻辑都会变成
SQL语句。
当然前提是要设计一个好的数据库。在一个前提就是,项目需要使用数据库来保存数据。
其他的“复杂的业务逻辑”到底指的是什么呢?
举个例子好了。
项目管理费的收取规则如下:
1.横向项目:
管理费 = 校内分配 * 8% + 外协分配 * 3% + 硬件费 * 3%
2.纵向项目:
a) 预算制:
费率 = (合同额中0至100万 * 8% + 合同额中100万至500万 * 5% + 合同额中500万至1000万 * 2% + 合同额中1000万以上 * 1%) / 合同额
管理费 = 总经费 * 费率
a)非预算制:
管理费 = 校内分配 * 8%
3.管理费计算时,假设经费分为N次到账,则前N-1次精确到千元,不足千元的舍弃。最后一次精确到元,不足一元的舍弃,但是最后一次需要补齐前面N-1次舍去的部分。
开发时,还要考虑一定程度上,需求会出现变化,比如预算制中的区间划分规则。另外,涉及钱的问题,事务和除法以及精度都必须严格正确,需要完善的测试。
感谢您举的例子
校内分配 、 外协分配 、 硬件费 这些都是某个表里的字段吧。
那么管理费也可以设置一个字段,也可以使用公式计算的方式来得到。
分为n次到账的话,那么就是n条子记录,这样好像就可以了。
当然我对你的项目不是太了解,我也不是说一定都要设置成子段的形式,这些都是根据具体的情况,和程序员多那种方式掌握的更好来决定的。
如果复杂程度够的话,我还会写一个类来专门处理呢。只是类的内部可能还是一大堆的SQL语句,呵呵。
恩……也是个办法。不过测试怎么搞?SQL很不好测,而且改起来也麻烦,改的时候再考虑测试,呃……
我觉得操作数据库是细节,是数据持久化,是为系统业务服务的,而不应该是出发点和着眼点,恩……如果我不用SQL,我用WCF呢?
不过这样的话就成转牛角尖了,呵呵。就方法来讲,没有最好,只有最合适。:)
我一直用visio来建库
如果数据结构发生变化,先具体一点,比如说加了一个字段,或者一个字段改了名字,那么我只要该一条记录就可以了,因为一个字段,在配置信息里面,只有一条记录与之对应。程序里的代码是不用修改的,因为也根本就没有什么代码。
当然还会有一些特殊情况,不过我的这种方法是可以把变动降低到最小。
对于单表的CRUD是一点都不麻烦的,因为一般这样的功能,几分钟就可以搞定。当然数据库设计不包括在内。
@冬冬
Ruby on Rails
不会用呢,我习惯先自己思考,自己寻找解决方法。
--引用--------------------------------------------------
冬冬: Ruby on Rails的那种方法其实很值得借鉴。
--------------------------------------------------------
这个模版好像有点问题,那我换一个吧。
对于LZ的目标来说,Migration是多此一举。 更何况Migration本质上和LZ的东西区别不大。 只是LZ针对的项目在数据处理->表现之间,不太需要多余的中间过程, 所以生成的东西比较不同罢了。
我倒是觉得像这样的活不应交给RoR这样的框架, 而是人人都应学会开发类似的东西管理自己的程序(在语言本身和方法论对元数据编程尚未有良好的支持的情况下)。
winform 我还不太会用,另外维护的时候,也不是有一个人来做的,好多人一起来维护的,b/s到是更方便,当然也就更危险,在正式使用后,应该关闭站点。
@ 皇帝的新装
做什么用的呢?对付数据库的。呵呵。偷懒用的,我很懒,不想写很多的代码。

