做完了图书馆维修管理系统,又接到一个任务,就是给测试组的讲一下我们合作开发过程中遇到的问题,以及心得体会,这也正好让我们几个开发的有机会能净下心来好好的总结一下自己通过这个项目的收获,总结完了还有人“检查”一下学习成果是个好差事。
这次做项目因为是合作开发,对于“合作”这两个字的理解有了很深的认识,要想提高工作效率,SVN的正确使用时必不可少的。这点可以参考我以前写过的博客
程序员必读正确使用svn——轻松快乐合作开发(http://blog.csdn.net/hy6688_/article/details/9500149)
合作开发的另一个好处就是可以学习小组中其他人的优点,因为我们的系统不是很大,所以我有时间研究学习一下别人的模块,从中学到了不少的东西,今天我就给大家分享一下我对于封装的心得体会。
首先带大家复习一下最基本的概念——什么事封装?
每个对象都包含它能进行操作的所需要的所有信息,对象不依赖其他对象来完成自己的操作
这句话是官方的解释,但是对于刚刚入门的小菜来说靠简单的读,是永远理解不了的。
然后我们又想封装的好处?
- 良好的封装能够减少耦合。
- 类内部的实现可以自由修改。
- 类具有清晰的对外接口。
好处列出来了,如果是考试看到这三条可能已经是得满分了。但是要想真正能理解,就要好好的体会了。
下面是我在项目中发现的几个比较好的封装给大家拿出来做个比较,帮助大家理解什么是封装。
例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都没有。不是也很简单吗?
但这紧紧是很简单的一个函数封装,接下来我还会给大家介绍系统中的几个例子,深入体会封装。
分享到:
相关推荐
ASP-134486-01 AD封装ASP-134486-01 AD封装ASP-134486-01 AD封装ASP-134486-01 AD封装ASP-134486-01 AD封装ASP-134486-01 AD封装ASP-134486-01 AD封装ASP-134486-01 AD封装ASP-134486-01 AD封装ASP-134486-01 AD封装...
to-263 5pin封装
PcbLib文件类型、直插元器件、贴片、Altium Designer封装库 KF-5.08连接器封装PCB文件3D封装Altium Designer库的型号类型如下,总有你需要的一款: KF2EDGK5.0-LI-2P...15P、KF2EDGK5.0-WI-2P...15P、KF2EDGK5.08-LI...
TYPE-C-31-M-02 USB Type-c allegro封装 韩荣HRo TYPE-C-31-M-02 规格:10mm*9.65mm 插拔力:5-20N 类型:TYPE-C母座 品名:TYPE-C母座 TYPE-C母座技术参数: 1.额定负荷: DC 40V 2.5A 2.接触电阻: ≤40mΩ 3.绝缘阻抗:...
第34章 项目1-博客前端:封装库--调试封装1
PCB设计 SCN-2-19 AD封装PCB设计 SCN-2-19 AD封装PCB设计 SCN-2-19 AD封装PCB设计 SCN-2-19 AD封装PCB设计 SCN-2-19 AD封装PCB设计 SCN-2-19 AD封装PCB设计 SCN-2-19 AD封装PCB设计 SCN-2-19 AD封装PCB设计 SCN-2-19...
SOT-23-6 封装尺寸图
PcbLib文件类型、直插元器件、贴片、Altium Designer封装库 射频天线-PEX-SMA天线插座封装PCB文件3D封装Altium Designer库的型号类型如下,总有你需要的一款: 2.4GANTF0、2.4GANTF1、2.4GANTF2、2.4GANTF3、2.4...
asp-134486-01-mkt-fmc-hpcf封装信息,数据详细,请认准型号。
防静电-无铅标识 Altium封装 AD封装库 2D+3D PCB封装库
PcbLib文件类型、直插元器件、贴片、Altium Designer封装库 防静电-无铅标识.封装PCB文件3D封装Altium Designer库的型号类型如下,总有你需要的一款: 常见的标识包含禁止类和提示类
该文档详尽描述了如何建立PCB封装,对新手有很好的指导作用。
第34章 项目1-博客前端:封装库--同步动画1
Xilinx Artix-7 Altium Designer 封装库。
第34章 项目1-博客前端:封装库--弹出登录框1
Android-X5WebView基本封装和使用 通过OkHttp拦截器、自定义CookieJar有效完成客户端与H5端的Cookie同步管理 监听WebView的加载进度 滚动条的设置(隐藏或者显示,内侧显示还是外侧显示) 优化X5WebView的预加载问题...
Altium-常用3D封装库(STEP)【常用贴片篇】 Altium-常用3D封装库(STEP)【电感电阻电容篇】 Altium-常用3D封装库(STEP)【发光器件篇】 Altium-常用3D封装库(STEP)【接插件篇】
USB-B母座90度 3d封装
Altium Designer DDA PCB封装
第34章 项目1-博客前端:封装库--CSS选择器[上]1