3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
来源:互联网 发布:苹果安装软件 编辑:程序博客网 时间:2024/04/29 02:08
一个简单的项目管理信息的,添加、删除、编辑、查询等功能的实现,把大的框架做好就可以,细节他会自己完善好,想想也很简单的一样,本以为1天时间就足可以搞定了,结果足足干了3天才算竣工,由于客户也是软件开发人员,沟通起来也比较顺畅一些,否则可能不止需要3天了。
项目虽然很小,但是由于跟我的主营方向是一致的,同时也想锻炼一下做项目的成熟程度有多高、有多快,所以也没嫌弃钱多钱少,开开心心就把这个项目开始启动了。项目虽然小但五脏俱全来形容了这个活儿了。
很多必要的功能虽然在需求里没有提到,但是都是需要做好的,例如:
01:系统的登录功能、这个是必然要有的。
02:记住密码功能,而且是需要有加密功能的。
03:退出系统的功能,总需要能安全退出系统的吧。
04:用户管理功能,例如哪些用户才能登录到系统里来?
05:用户修改密码功能,停用功能,设置密码功能等。
06:用户可以访问那些菜单等?
07:用户有哪些操作权限等?
08:角色管理功能,用户角色关系功能,角色的权限功能。
09:友善的菜单导航功能。
10:没有权限的友善提示功能。
11:附件的管理、上传、下载、删除等等。
12:查询分页功能等等,虽然都没提出,但是这些功能都需要做好的。
为了快速搞定项目,毕竟项目的预算很有限,所有有些功能模块能不开发就不开发,那我们就用现成的成熟组件,通用权限管理系统,做为用户账户管理、权限管理
菜单管理的核心组件,这样可以大大的提高工作效率,可以灵活配置管理这个小型B/S项目信息管理系统了。
底层代码生成器生成的代码,可能只占用这个系统的代码的 1/3左右,但是编写这些代码的时间也省了,整个开发过程不是可以节省1/3了,而且是纯体力劳动而已。整个权限管理等可能需要整个系统开发的1/3左右的精力,若这部分也不用开发了,又可以节省整个软件项目开发的1/3时间。整个框架的稳定完善,也可以说是占用整个软件开发项目的1/3时间是应该的,若是2手空空开始开发的话。
那我们的项目采用了
这样也大大的降低了软件项目的开发的失败风险,谁说你不会在前面的2/3时间上失败呢?未必能走到后面的1/3时间上来啊,对吧。
经过多年的积累,手上才会有一个运行稳定、可以灵活配置的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>
/// <date>2010-09-28</date>
/// </author>
/// </summary>
public partial class ProjectManager : BaseManager, IBaseManager
{
public DataTable Search(string userId, string searchValue)
{
// 一、这里是开始进行动态SQL语句拼接,字段名、表明都进行了常量定义,表名字段名发生变化时,很容易就知道程序哪里都调用了这些。
string sqlQuery = string.Empty;
sqlQuery = " SELECT * "
+ " FROM " + this.CurrentTableName
+ " WHERE " + ProjectTable.FieldDeleteMark + " = 0 ";
// 二、我们认为 userId 这个查询条件是安全,不是人为输入的参数,所以直接进行了SQL语句拼接
if (!String.IsNullOrEmpty(userId))
{
sqlQuery += " AND " + ProjectTable.FieldCreateUserId + " = '" + userId + "'";
}
// 三、这里是进行参数化的准备,因为是多个不确定的查询参数,所以用了List。
List<DbParameter> dbParameters = new List<DbParameter>();
// 四、这里看查询条件是否为空
searchValue = searchValue.Trim();
if (!String.IsNullOrEmpty(searchValue))
{
// 五、这里是进行支持多种数据库的参数化查询
sqlQuery += " AND (" + ProjectTable.FieldKeHuMingCheng + " LIKE " + DbHelper.GetParameter(ProjectTable.FieldKeHuMingCheng);
sqlQuery += " OR " + ProjectTable.FieldKeHuXiangMuMingCheng + " LIKE " + DbHelper.GetParameter(ProjectTable.FieldKeHuXiangMuMingCheng);
sqlQuery += " OR " + ProjectTable.FieldCreateUserRealname + " LIKE " + DbHelper.GetParameter(ProjectTable.FieldCreateUserRealname);
sqlQuery += " OR " + ProjectTable.FieldDescription + " LIKE " + DbHelper.GetParameter(ProjectTable.FieldDescription) + ")";
// 六、这里是判断,用户是否已经输入了%
if (searchValue.IndexOf("%") < 0)
{
searchValue = "%" + searchValue + "%";
}
// 七、这里生成支持多数据库的参数
dbParameters.Add(DbHelper.MakeInParam(ProjectTable.FieldKeHuMingCheng, searchValue));
dbParameters.Add(DbHelper.MakeInParam(ProjectTable.FieldKeHuXiangMuMingCheng, searchValue));
dbParameters.Add(DbHelper.MakeInParam(ProjectTable.FieldCreateUserRealname, searchValue));
dbParameters.Add(DbHelper.MakeInParam(ProjectTable.FieldDescription, searchValue));
}
sqlQuery += " ORDER BY " + ProjectTable.FieldSortCode + " DESC ";
// 八、这里是将List转换为数组,进行数据库查询
return DbHelper.Fill(sqlQuery, dbParameters.ToArray());
}
/// <summary>
/// 更新(带有修改记录功能)
/// </summary>
/// <param name="projectEntity">实体</param>
/// <param name="changeLog">修改记录</param>
/// <returns>影响行数</returns>
public int Update(ProjectEntity projectEntity, bool changeLog)
{
// 若不需要修改记录
if (!changeLog)
{
return this.UpdateEntity(projectEntity);
}
String changeMessage = String.Empty;
// 获取原来的数据
ProjectEntity oldProjectEntity = this.GetEntity((int)projectEntity.Id);
if (oldProjectEntity.KeHuXiangMuMingCheng != projectEntity.KeHuXiangMuMingCheng)
{
changeMessage += "客户项目名称被修改为:" + projectEntity.KeHuXiangMuMingCheng + " 原值:" + oldProjectEntity.KeHuXiangMuMingCheng + "<br>";
}
if (oldProjectEntity.KeHuMingCheng != projectEntity.KeHuMingCheng)
{
changeMessage += "客户名称被修改为:" + projectEntity.KeHuMingCheng + " 原值:" + oldProjectEntity.KeHuMingCheng + "<br>";
}
if (oldProjectEntity.KaiGaiRiQi != projectEntity.KaiGaiRiQi)
{
// changeMessage += "开改模日期被修改为:" + ((DateTime)projectEntity.KaiGaiRiQi).ToString(BaseSystemInfo.DateFormat) + " 原值:" + ((DateTime)oldProjectEntity.KaiGaiRiQi).ToString(BaseSystemInfo.DateFormat) + "<br>";
}
if (!String.IsNullOrEmpty(changeMessage))
{
BaseCommentManager commentManager = new BaseCommentManager(this.DbHelper, this.UserInfo);
commentManager.Add("工程管理", projectEntity.Id.ToString(), projectEntity.KeHuXiangMuMingCheng, changeMessage, false, String.Empty, false, this.UserInfo.IPAddress);
}
return this.UpdateEntity(projectEntity);
}
}
}
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 项目管理---小型软件开发团队的建设与人员工作安排(主要针对B/S软件开发)
- 软件项目开发步骤
- 小型软件项目开发流程探讨
- 小型软件项目开发流程探讨
- 开发小型组态软件
- 小型软件团队开发
- B/S模式软件开发
- 软件项目的开发步骤(图)
- 软件开发的步骤
- Android ListView Fast and Smooth Scroll 終極秘技
- eclipse 整合jdk、tomcat安装
- 桶排序
- LED知识(四)
- T-SQL 语句插入中文数据时数据库显示全是问号“???”的解决方法(数据库编码规则)
- 3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
- 热烈庆祝小静静成功转正!
- optical_vortex_converter_femtosecond_laser
- myeclipse简单配置使开发更快更流畅
- When You Are Old
- 解决java时间处理的烦恼
- 由IsPostBack引发的思考
- javascript各种倒计时
- 开源网站网址收集