2012年12月31日
摘要: 1.引言开放封闭原则(OCP,Open Clase Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化,降低耦合,而开放封闭原则正是对这一目标的最直接的体现。其它原则很多时候都是为了实现这一目标服务的,如 里氏替换原则。2.引经据典核心思想:软件实体应该是可扩展,而不是可修改。也就是说,对扩展开放,而对修改是封闭的。具体体现:对扩展开放,意味着有新需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。实现开放封闭原则的核心思想就是对抽象编程,而不是对具体编程,因为抽象是相对稳定的。让 阅读全文
posted @ 2012-12-31 15:11 Qlin 阅读(520) 评论(0) 推荐(0) 编辑
  2012年12月29日
摘要: 1.引言迪米特法则(Law of Demeter)又叫作最少知识原则(LKP,Least Knowledge Principle),就是说一个对象应当对其他对象有尽可能少的了解,类与类之间的了解的越多,关系越密切,耦合度越大,当一个类发生改变时,另一个类也可能发生变化。2.引经据典核心思想:最少依赖具体体现:类内部应该高内聚,设置相应的权限,有选择的暴露方法,这就是封装的奥秘。类的依赖关系尽量减少,保持简单和独立,降低耦合。一些理解,有些东西,可以适当的知道,知道的太多对你不好。关系越复杂,人越不敢接近你。要达到很高的内修养,才能有很好的表现。这些江湖术语都包含一些哲理。3.应用反思 /... 阅读全文
posted @ 2012-12-29 09:21 Qlin 阅读(397) 评论(0) 推荐(1) 编辑
  2012年12月28日
摘要: 1.引言上一篇文章介绍了对象驻留,请查考值对象共享 。 string驻留,还是对象共享都必须要进行对象判等,以一定的规则进行比较,相同的就归为同一个引用名下。对象判等就应该要查考Object的判断方法了。2.判等认识一下System.Object类中实现的几个对象判等方法,它们是:public virtual bool Equals(object obj) 虚方法,比较对象实例是否相等public static bool Equals(object objA, object objB) 静态方法,比较对象实例是否相等public static bool ReferenceEquals(obje 阅读全文
posted @ 2012-12-28 11:39 Qlin 阅读(941) 评论(0) 推荐(1) 编辑
  2012年12月27日
摘要: 1.引言里氏替换原则(LSP,Liskov Substitution Principle)是关于继承机制的原则,是实现开放封闭原则的具体规范,违反了里氏替换原则必然违反了开放封闭原则。2.引经据典核心思想:子类必须能够替换其基类。一些理解子类继承基类,是一种IS-A关系,只能说子类 IS-A 基类,不能反过来,该原则说的就是处理继承问题的原则。父类的非抽象方法,不应该被子类重写,重写了就会改变原来父类的方法,造成意想不到的结果,就不能完全代表父类了,如果有意要子类重写请声明虚方法或者抽象方法。3.应用反思//开关 public class Switch { ... 阅读全文
posted @ 2012-12-27 16:29 Qlin 阅读(1438) 评论(0) 推荐(2) 编辑
摘要: 1.引言由于string使用频繁,所以微软把它实现像值类型那样方便,甚至有string驻留机制,声明相同的字符串可以指向相同的托管堆内存,这样就可以提供内存的利用率。如果有一种class类型,它只是用来表示一些特征、一些描述信息、一些数据的存储,但是它们声明了就不会去改变这个对象里面的值,那么这种类型的对象就是值对象,这样的对象就可以共享,因为它不可变。2.驻留方式string有驻留方式,值对象就跟值类型和string一样,不可变,以至于值对象可以进行共享,如果值对象也能够以驻留方式进行创建,那就可以轻松实现共享,如下例子: public class User { p... 阅读全文
posted @ 2012-12-27 13:11 Qlin 阅读(1497) 评论(28) 推荐(2) 编辑
  2012年12月26日
摘要: 1.引言现实中有这样一种情况,火车站窗口总是挤满了排队的人,而排队的人并非都是为了买票,有的 是咨询,有的是退票,但都必须排在这一长长的队伍中,显然安排不同的窗口处理不同的业务会大大提高效率。同样,软件设计中,胖接口强调所有的继承的类必须实现所有的方法,而有些实现的方法并非有用,这种情况对接口来说就是一种让费,而接口隔离原则(ISP,Interface Segregation Priciple)正是应对这种情况的设计标准。2.引经据典核心思想:使用多个小的专门接口,而不要使用一个大的总接口。具体而言:接口应该是内聚的,应该避免出现胖接口。一个类对另一个类的依赖应该建立在最小的接口上,不要强迫依 阅读全文
posted @ 2012-12-26 17:59 Qlin 阅读(461) 评论(0) 推荐(1) 编辑
  2012年12月25日
摘要: 1.引言著名好莱坞法则:不要调用我们,我们会调用你。这是对依赖倒置原则(DIP,Dependency Inversion Principle)最形象的诠释,通过抽象机制有效解决类层次之间的关系,降低耦合的粒度,实现对抽象的依赖是依赖倒置的核心思想。2.引经据典核心思想:依赖于抽象具体体现在:高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于具体,具体应该依赖于抽象。上面两点也就是解决方案,依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。依赖倒置原则的应用可以更好的维护和扩展。3.应用反思上节 设计模式原则]第一回:单一职责原则 中提到的例子,我们来应用 阅读全文
posted @ 2012-12-25 17:16 Qlin 阅读(531) 评论(1) 推荐(1) 编辑
  2012年12月24日
摘要: 1.引言单一职责原则(SRP,Single Responsibility Principle),强调的是职责分离,在某种程度上是对职责的理解是构成了不同类之间的耦合关系的设计关键。2.引经据典核心思想:一个类最好只做一件事,只有一个引起它变化的原因。单一职责原则可以看成是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少变化的原因。职责过多,变化的原因也就多,将导致职责之间的依赖,互相产生影响,从而极大的损伤其内聚性和耦合度。一些理解:所说的职责一般指功能,然而单一职责原则是由引起变化的原因决定,并非职责决定,这个要引起重视,不要会错意了。一个类最好只做一件事 阅读全文
posted @ 2012-12-24 16:17 Qlin 阅读(823) 评论(0) 推荐(1) 编辑
  2012年11月1日
摘要: 1.引言在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了,也不能一次性显示给客户端,所以要把数据进行分批查询出来,每页显示一定量的数据,这就是数据要分页。2.常用的数据分页方法我们经常会碰到要取n到m条记录,就是有分页思想,下面罗列一下一般的方法。我本地的一张表 tbl_FlightsDetail,有300多W记录,主键 FlightsDetailID(Guid),要求按照FlightsDetailID排序 取 3000001 到3000010 之间的10条记录,也是百万级。方法1 定位法 (利用ID大于多少)语句形式:select top 10 * from tbl_Fl 阅读全文
posted @ 2012-11-01 11:36 Qlin 阅读(62578) 评论(43) 推荐(34) 编辑
  2012年10月18日
摘要: 1.引言 前面几个章节介绍了Unity的基本使用,主要分为程序和配置文件两种方法的使用,可以参考一下链接,[IoC容器Unity]第一回:Unity预览[IoC容器Unity]第二回:Lifetime Managers生命周期[IoC容器Unity]第三回:依赖注入本节作为结束篇,将介绍一下在项目中如何应用Unity。 2.范例Unity应用广泛,在很多开源项目中都可以找到Unity的身影。就拿微软的开源项目新闻发布系统 Kigg 举例,Kigg的依赖注入就是使用到了Unity,大家可以下载。Kigg是MVC应用的一个推荐范例,本节介绍一下其中的依赖注入IoC容器,该容器在Kigg.Cor.. 阅读全文
posted @ 2012-10-18 11:47 Qlin 阅读(6453) 评论(13) 推荐(10) 编辑
摘要: 1.引言上节介绍了,Unity的Lifetime Managers生命周期,Unity具体实现依赖注入包含构造函数注入、属性注入、方法注入,所谓注入相当赋值,下面一个一个来介绍。2.构造函数注入Unity利用Resolve方法解析一个对象,都是调用注册类型的构造函数来初始化的,初始化时,Unity能够控制初始化的值,当然,我们要给Unity提供足够的原料,要不然也是巧妇难无米之炊,下面看一些简单的示例。先准备几个类如下: /// <summary> /// 班级接口 /// </summary> public interface IClass { s... 阅读全文
posted @ 2012-10-18 10:25 Qlin 阅读(7074) 评论(6) 推荐(5) 编辑
  2012年10月17日
摘要: 1.引言Unity的生命周期是注册的类型对象的生命周期,而Unity默认情况下会自动帮我们维护好这些对象的生命周期,我们也可以显示配置对象的生命周期,Unity将按照配置自动管理,非常方便,下面就介绍一下 Unity中内置的生命周期管理器。2.Lifetime Managers生命周期管理准备以下类关系,用于演示有2个接口类:IClass(班级接口)和ISubject(科目接口),其分别有2个实现类。看下面一个示例public static void RegisterInstance(){ IClass myClass = new MyClass(); IClass yourCla... 阅读全文
posted @ 2012-10-17 17:22 Qlin 阅读(9948) 评论(7) 推荐(13) 编辑
  2012年10月16日
摘要: 1.引言高内聚,低耦合成为一个OO架构设计的一个参考标准。高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单。拿咱国家举例来说,假如你是中国人。高内聚:就是说你跟中国亲,关系好,国家会保护你。低内聚:就是说你跟中国的关系不好,那还怎么混,改天就要批斗你,你就是个问题源。低耦合:就是说你跟日本的关系非常正常,非常简单,这样的话,就不会被骂汉奸了。高耦合:就是说你跟日本亲,活该被砸,被游街。上面例子虚构的,不太贴切,但从中可以看出来高内聚和低耦合的处境是最好的。高内聚是对内部成员跟本身这个模块的关系的描述,低耦合是对成员跟外部模块之间关系的描述 阅读全文
posted @ 2012-10-16 15:55 Qlin 阅读(13423) 评论(14) 推荐(8) 编辑
  2012年10月9日
摘要: 1.依赖依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖。如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它。下面看一个简单的示例: /// <summary> /// 用户播放媒体文件 /// </summary> public class OperationMain { public void PlayMedia() { MediaFile _mtype = new MediaFile(); Player _pl... 阅读全文
posted @ 2012-10-09 08:56 Qlin 阅读(71789) 评论(53) 推荐(75) 编辑
  2012年9月26日
摘要: 1.目录[Scheduled Timer]第一回:Scheduled Timer介绍[Scheduled Timer]第二回:时间调度[Scheduled Timer]第三回:事件存储(EventStorage)[Scheduled Timer]第四回:事件过滤(EventFilter)[Scheduled Timer]第五回:任务方法(MethodCall)[Scheduled Timer]第六回:定时器作业(TimerJob)[Scheduled Timer]第七回:ScheduleTimer2.类图部分类图如下,不是全部,点击每个图片上的类图名称可以跳转到相关的介绍。 ... 阅读全文
posted @ 2012-09-26 09:00 Qlin 阅读(1488) 评论(0) 推荐(4) 编辑