代码改变世界

外观模式(Façade)

2012-09-17 08:06 by Mike.Jiang, 536 阅读, 0 推荐, 收藏, 编辑
摘要:1 概述当你开发系统时,遇到这样的问题:1>分层开发时,底层的多个类相互协作完成一些复杂的功能,高层的开发人员也必须要知道这些底层类是如何协作完成功能,这样做合理吗2>在开发系统时,需要用到已有的旧系统中的功能,面对那些杂乱无章的代码、逻辑我们怎么办,难道要每一位开发人员都去面对吗当遇到这些问题,在面向对象的世界里,我们是如何解决——外观模式2 GOF意图为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[GOF 《设计模式》]结构图3 理解SubSystem:复杂的子系统,其中的类关系复杂,类比较多;Client:高层 阅读全文

VS2008 工具箱都是textbox(报表设计时)

2012-09-11 13:06 by Mike.Jiang, 828 阅读, 0 推荐, 收藏, 编辑
摘要:1 问题在用VS2008做report service时,出现这样一个问题:工具箱中都是textbox,其它的控件都没有reset也没用。2解决方法在网上找了很多解决方法,发现下面的方法有用,如果您也遇到这样的问题不妨试试下面的方法:1>在文件浏览器中,显示隐藏文件;2>打开目录:C:\Documents and Settings\当前用户名\Local Settings\Application Data\Microsoft\VisualStudio\9.0 (WinXP\server2003)3>删除文件:删除"toolbox.tbd", "t 阅读全文

适配器模式(Adapter)

2012-09-11 08:05 by Mike.Jiang, 554 阅读, 0 推荐, 收藏, 编辑
摘要:1 概述遇到这样的问题:需要用到已有的功能,功能的数据和行为都是正确的,但是功能的调用繁杂并要在多个地方调用。在正常的思维下,我们将功能的调用写在一个公共类的一个方法中,这样我们就已经达到了隔离已有复杂功能目的。但这样做有如下缺点:1>如果这个类有多个公开的方法,则不能对这个类进行统一的管理;2>如果这个类中的方法相互依赖很强,那么写公共方法也会比较烦;最后,我们用OO的语言开发,应该以OO的思想来解决这个问题。上述的问题,通过大师们的总结,已经形成一个统一的解决模式:适配器模式;2 GOF中的定义2.1 意图: 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本 阅读全文

TABLE 多表头固定问题(基本jquery插件)

2012-09-06 08:16 by Mike.Jiang, 19783 阅读, 9 推荐, 收藏, 编辑
摘要:在这个插件的使用中,部分网友反应有两个问题:1>单元格内容很长时,会出现布局问题;2>固定的表头,有时与下面的tbody中的元素不能对齐解决方法:1>第一个问题实际就是单元格自动换行的问题,可以用下面的方法解决(但仅IE下通过),加入CSSView Code table tbody td { word-break: break-all; word-wrap: break-word; }并在调用时传入tableLayout="fixed",采用固定的table布局方案。2>第二个问题,试过很多种方法,最稳定的... 阅读全文

组合模式(Composite)

2012-09-04 08:06 by Mike.Jiang, 282 阅读, 0 推荐, 收藏, 编辑
摘要:1 概述当遇到这样的问题:一个对象它即可以是操作对象,又可以作为本身对象的容器。客户端代码在操作时,需要知道某个对象是容器对象还是操作对象。这样客户端代码就与容器、操作对象耦合。我们需要这样一种模式,使得即可以支持对象可以是操作对象或容器,并且也支持客户代码不需要知道某个对象是某个具体类型。2 GOF中的定义2.1意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。2.2 结构图3松耦合的实现——客户代码不需要区分某个对象是树支还是树叶View Code public abstract class Componen... 阅读全文

SQL好习惯:编写支持可搜索的SQL

2012-08-31 08:26 by Mike.Jiang, 1193 阅读, 1 推荐, 收藏, 编辑
摘要:1 概述最近维护系统时,客户经常反馈这样一个内容:要在查询列表上加上一个查询条件。这样的要求一点也不过分,并且看起来工作量也不大,不就是加一个WHERE条件嘛,但是当调试到DAL层时,立刻石化——遇到在SELECT子句中编写子查询的SQL,SELECT SO.order_no,(SELECT SUM(SOD.good_num) FROM [StockOrderDetails] AS SOD WHERE SOD.order_id=SO.id) AS order_numFROM [StockOrder] AS SO 这样的写法缺点如下:1>order_num不能在SELECT中继续使用2&g 阅读全文

常见数据库设计(4)——树形结构数据

2012-08-29 10:39 by Mike.Jiang, 41572 阅读, 7 推荐, 收藏, 编辑
摘要:1 概述树形数据,主要关注的是:1> 如何将数据高效地以树形的形式展现给用户2> 通过某个节点找到所有的父节点。3> 获取某个节点的所有的后继节点(包括子节点的子节点)至于添加、修改、删除和通过一个父节点获取对应的子节点,都是可以很容易的实现。2 邻接模型2.1业务:文件存放位置,在档案管理中,需要为文件的存放位置建模,文件存在抽屉,然后抽屉在某个柜子中,柜子在某个房间中。2.2表结构:2.3备注可以在表中再加入一个level_num字段(表示所处在树的深度),这样就少了那一个递归查询的操作,但是在管理上有做一些处理。2.4 Normal 0 7.8 磅 0 2 ... 阅读全文

常见数据库设计(3)——历史数据问题之多记录变更

2012-08-28 22:13 by Mike.Jiang, 9040 阅读, 0 推荐, 收藏, 编辑
摘要:关于历史数据的单记录变更:常见数据库设计(2)——历史数据问题之单记录变更1.概述在保存客户操作历史数据时,有一种数据,如标书的标书流水+标书清单、细化方案的细化方案流水+细化方案清单、商品价格的价格变动流水+变动清单等等。这样的历史数据,它们都有一个控制流水版本的主流水表,还有一个与某个版本对应的清单表。2. 多记录变更、无储存未来历史记录的需求,储存于单表中业务:在做付款计划时,需要保存计划的历史版本数据,同时也要记录每一计划针对哪些物资进行付款的。表结构说明:如单记录一样,版本的控制在付款计划表中。主体如何实现版本控制请参见单记录变更3. 多记录变更、无储存未来历史记录的需求,储存于多表 阅读全文

状态模式 State

2012-08-27 17:50 by Mike.Jiang, 382 阅读, 0 推荐, 收藏, 编辑
摘要:状态模式(允许通过改变对象的内部状态而改变对象的行为, 这个对象表现得就好像修改了它的类一样)与策略模式的类图一样,实现一样,都是解耦if else 。只是它们解决问题的语境不同,但都可以归纳到解耦ifelse,将不同行为抽象成对象分布在子类当中,在Context中配置当前操作对象。这样在新增状态或修改已有状态时,不再违背开闭原则,遵守单一职责原则。 阅读全文

SQL JOIN --Merge Join

2012-08-27 16:36 by Mike.Jiang, 7964 阅读, 2 推荐, 收藏, 编辑
摘要:1概述Merge join 合并连接。两个集合进行merge join,需要有一个等值的条件,然后需要两个已排序好的集合。2 one-to-many与many-to-many2.1 One-to-many当参与merge join的两个集合中,其中一个集合在等值条件上是具有唯一性(如SELECT * FROM T1 INNER JOIN T2 ON T1.A=T2.B,如果T1在A列上具有唯一性),那么即为one-to-many。主要步骤为:首先从两个集合中各取出一条记录进行比较,如果符合join条件,那么取出该行;否则将值小记录从集合中移除,然后取值小集合的下一行,继续比较。2.2 many 阅读全文