Design & Pattern
摘要: 一个外部具体对象的引入,必然会给一个模块带来与外部模块之间的依赖。而具体对象的创建始终是我们无法规避的。即使我们可以利用设计模式的工厂方法模式或抽象工厂封装具体对象创建的逻辑,但却又再次引入了具体工厂对象的创建依赖。虽然在设计上有所改进,但没有彻底解除具体依赖,仍让我心有戚戚焉。 以一个电子商务网站的设计为例。在该项目中要求对客户的订单进行管理,例如插入订单。考虑到访问量的关系,系统为订单管理提...
阅读全文
摘要: 《编程絮语》之二 没有对象协作的系统是不可想象的,因为此时的系统就是一个庞大的类,一个无所不知的“上帝类”。每个对象都有自己的自治领域,“各人自扫门前雪”,对象定义的法则就是这么自私。单一职责原则(SRP)[1]体现的正是这样的道理。对象的职责越少,则对象之间的依赖就越少。这一前提就是对象具有足够的高内聚与细粒度。这样的对象一方面有利于对象的重用,...
阅读全文
摘要: 《编程絮语》之一 C#的语法脱胎于C++,因而保留了virtual关键字,可以定义一个虚方法(或虚属性)。一个类的成员被定义为virtual,就意味着它在告诉自己的子类:我准备了一笔遗产,你可以全盘接受,也可以完全拒绝或者修改我的遗嘱。显然,虚方法授予子类的权利甚至大于抽象方法。子类面对抽象方法只有重写(override)的权利,而对于虚方法,它还可以选择完全继承。 毫无疑问,虚方法破坏了对象的...
阅读全文
摘要: 设计模式最经典的书籍自然是GOF的《设计模式》,但很多人的反应是这本书太难理解了,并不适合初学者阅读。这话说得在理。一方面,本书使用的C++示例难倒了一大群Java和.NET的开发人员;另一方面,这本书的风格过于专业化,更偏向于学术论文的风格(事实上,本书的雏形就是来源于GOF中Erich Gamma的博士论文),因此就显得有些晦涩难懂了。 基本上,本书可以作为我们参考的标准,是经常查阅的文献资...
阅读全文
摘要: 本讲义主要包括以下三部分:面向对象三要素、面向对象五原则和面向对象六视点。面向对象三要素包括:封装(Encapsulation)、继承 (Inheritance)、多态(Polymorphism)。五原则自然是众所周知的OO五原则:单一职责原则、开放封闭原则、Liskov替换原则、依赖倒置原则和接口隔离原则。前面两部分内容是大多数OO设计都需要掌握的内容,在讲解中虽然加入了我的一些理解,但讲义中并...
阅读全文
摘要: Mediator模式有一种本事,就是可以让本身需要互相协作的对方,可以不用知道彼此,而把两者之间的联系,转交给Mediator来处理。换句话说,Mediator模式解除了需要互相协调的对象之间的依赖。这也是Mediator(调停者)模式名字的由来。一个颇为形象的例子是聊天室。进入聊天室的用户总是要彼此通信的,这些对象如果直接进行交互,就会彼此连接,最后织成一张纷繁复杂的大网。要分清彼此之间的关系,...
阅读全文
摘要: 分析PetShop 4.0之表示层设计。
阅读全文
摘要: 《解剖PetShop》系列之五,分析PetShop的业务逻辑层设计。
阅读全文
摘要: 结合PetShop 4.0全面讲解ASP.NET缓存,为《解剖PetShop》系列之四。
阅读全文
摘要: 通过项目实践谈Command模式。
阅读全文
摘要: 通过一个实例谈Builder模式。
阅读全文
摘要: “面向接口编程”是面向对象编程思想中最重要的一个原则。根据“封装变化”的原理,我们常常将易于变化的部分进行抽象,定义为接口。对于调用者而言,只需要知道接口的外部定义即可,具体的实现则不用理会。在设计模式中,Strategy模式就是这样的一个“面向接口编程”的最佳体现,它进行抽象的一部分是针对特定的“算法”,或者说是“策略”。
阅读全文
摘要: 讲解.Net Framework中的Decorator模式。
阅读全文
摘要: 在进行系统设计时,除了对安全、事务等问题给与足够的重视外,性能也是一个不可避免的问题所在,尤其是一个B/S结构的软件系统,必须充分地考虑访问量、数据流量、服务器负荷的问题。解决性能的瓶颈,除了对硬件系统进行升级外,软件设计的合理性尤为重要。
在前面我曾提到,分层式结构设计可能会在一定程度上影响数据访问的性能,然而与它给设计人员带来的好处相比,几乎可以忽略。要提供整个系统的性能,还可以从数据库的优化着手,例如连接池的使用、建立索引、优化查询策略等等,例如在PetShop中就利用了数据库的Cache,对于数据量较大的订单数据,则利用分库的方式为其单独建立了Order和Inventory数据库。而在软件设计上,比较有用的方式是利用多线程与异步处理方式。
阅读全文
摘要: 前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来。这种争论不可避免带有浓厚的商业色彩,对于我们开发人员而言,没有必要过多关注。然而PetShop随着版本的不断更新,至现在基于.Net 2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,却又很多可以借鉴之处。PetShop是一个小型的项目,系统架构与代码都比较简单,却也凸现了许多颇有价值的设计与开发理念。本系列试图对PetShop作一个全方位的解剖,依据的代码是PetShop4.0,可以从链接http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp中获得。
《解剖PetShop》系列之一:PetShop的系统架构设计
阅读全文