现在的位置: 首页 > 综合 > 正文

项目总结–谈谈封装(条件查询)

2013年10月26日 ⁄ 综合 ⁄ 共 1960字 ⁄ 字号 评论关闭

        做完了图书馆维修管理系统,又接到一个任务,就是给测试组的讲一下我们合作开发过程中遇到的问题,以及心得体会,这也正好让我们几个开发的有机会能净下心来好好的总结一下自己通过这个项目的收获,总结完了还有人“检查”一下学习成果是个好差事。

 

        这次做项目因为是合作开发,对于“合作”这两个字的理解有了很深的认识,要想提高工作效率,SVN的正确使用时必不可少的。这点可以参考我以前写过的博客

程序员必读正确使用svn——轻松快乐合作开发http://blog.csdn.net/hy6688_/article/details/9500149

        合作开发的另一个好处就是可以学习小组中其他人的优点,因为我们的系统不是很大,所以我有时间研究学习一下别人的模块,从中学到了不少的东西,今天我就给大家分享一下我对于封装的心得体会。


        首先带大家复习一下最基本的概念——什么事封装?

       
每个对象都包含它能进行操作的所需要的所有信息,对象不依赖其他对象来完成自己的操作

 

        这句话是官方的解释,但是对于刚刚入门的小菜来说靠简单的读,是永远理解不了的。


       
然后我们又想封装的好处?

  1. 良好的封装能够减少耦合。
  2. 类内部的实现可以自由修改。
  3. 类具有清晰的对外接口。


        好处列出来了,如果是考试看到这三条可能已经是得满分了。但是要想真正能理解,就要好好的体会了。

        下面是我在项目中发现的几个比较好的封装给大家拿出来做个比较,帮助大家理解什么是封装。

1.根据条件查询:

看代码之前先想想自已以前写的代码,(根据条件查询的代码)

---

---请思考

看代码:(系统采用工厂加反射的三层架构)

public void BindData()
{
	DataSet ds = new DataSet();
	StringBuilder strWhere = new StringBuilder();
	if (txtKeyword.Text.Trim() != "")
	{
		//请修改 keywordField 为需要匹配查询的真实字段名称
		strWhere.AppendFormat("keywordField like'%{0}%'", txtKeyword.Text.Trim());
	 }
	ds = bll.GetList(strWhere.ToString());
	gridView.DataSource = ds;
	gridView.DataBind();
}

        看完代码,不知道大家有什么想法,首先说说自己的想法,以前我一般都是只在U层调用B层的方法B层调用D层方法,最终的实现是在D层,写符合要求sql语句,但是上面的这段代码可以说是把查询的条件写在了业务层,然后我们看D层的代码如何写:

代码:

/// <summary>
/// 获得数据列表--韩义
/// </summary>
/// <param name="strWhere"> 获得数据列表--韩义</param>
/// <returns> 获得数据列表--韩义</returns>
public DataSet GetList(string strWhere)
{
	StringBuilder strSql = new StringBuilder();
	strSql.Append("selectgroupID,groupName,leaderName,leaderPhone,leaderQQ,spare1,spare2,spare3 ");
	strSql.Append(" FROM T_GroupInfo");
	if (strWhere.Trim() != "")
	{
		strSql.Append(" where " + strWhere);
	}
	strSql.Append(" ORDER BY groupName");
	return DbHelperSQL.Query(strSql.ToString());
}

       
这样有什么好处呢?

        我想大家应该也发现了。两段代码有两个层次的封装:

        1.对于绑定控件这个操作封装为一个函数,这个函数可以重复使用,而且一旦有什么变动都可以只修改这个函数。体现了封装的好处一。

        2.现在我们的这个D层的类基本上时万能的了。你可以随便的改业务(更改查询的条件)而且可以怎么实现的呢——使用StringBuilder类构件我们的字符串,sql语句的拼接转移到了业务层,由具体的业务控制要查询的条件。

        看这段代码我还想到,如果这段代码用在机房收费系统的组合查询中会有什么样的好处呢。我们通过StringBuilder类把需要添加的查询条件都在U层就组建好,可以减少判断,如果是3个组合条件,也仅仅是3个简单的if语句,连else都没有。不是也很简单吗?


        但这紧紧是很简单的一个函数封装,接下来我还会给大家介绍系统中的几个例子,深入体会封装。

抱歉!评论已关闭.