随笔分类 -  架构设计

1
[设计模式]第四回:建造者模式(Builder Pattern)
摘要:1.概述将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示,这就是建造者模式。简单的说就是生产一个产品的步骤比较稳定,单个步骤变化会产生一个不同的产品。2.实践物理模型建造者模式的例子很多,如肯德基套餐,游戏角色人物等等。前一段时间同事辞职去开了一家米线店,开张时我们这些同事都去捧... 阅读全文
posted @ 2014-12-24 10:46 Qlin 阅读(702) 评论(1) 推荐(0) 编辑
[设计模式]第三回:抽象工厂模式(Abstract Factory)
摘要:概述在系统中往往会有这种需求,客户端会用到很多对象,而且根据需求变化很可能会切换成另外一套对象。抽象工厂模式可以提供一种封装机制来面对这种需求。实践物理模型:皮肤主题:设计一个可以切换皮肤主题,切换为 黑色 和灰色样式,每个元素的样式都要单独定义,如Input的样式,button的样式,这些所有的元... 阅读全文
posted @ 2014-12-08 16:20 Qlin 阅读(617) 评论(0) 推荐(0) 编辑
[设计模式]第二回:工厂方法模式(Factory Method)
摘要:1.引言在软件系统 中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供 一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。 2.实战结构图:意图:定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。 class Program { static void Main(string[] args) { ... 阅读全文
posted @ 2013-01-11 15:28 Qlin 阅读(573) 评论(0) 推荐(1) 编辑
[设计模式]第一回:单例模式(Singleton Pattern)
摘要:1.引言设计模式的文章,园子里很多,本人也只是在看文章,把自己的理解写下来,已加深映像。Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这也是一种功能的实现,比如缓存Cache,虽说有很多访问点,但是它们其实都访问的是同一个实例。Singleton模式是用于控制创建对象,所以是一种创建型模式。2.实战物理模型:实现实例唯一,很快就想到了静态变量。static变量,如果类中没有静态构造函数,该变量将在编译时就被添加到加载堆loader heap中,如果有静态构造函数,将在第一次访问类时进行初始化,初始化完成之后,就一直在loader heap中,将不会消失,是分配的 阅读全文
posted @ 2013-01-08 17:46 Qlin 阅读(527) 评论(0) 推荐(0) 编辑
[设计模式原则]第六回:开放封闭原则
摘要:1.引言开放封闭原则(OCP,Open Clase Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化,降低耦合,而开放封闭原则正是对这一目标的最直接的体现。其它原则很多时候都是为了实现这一目标服务的,如 里氏替换原则。2.引经据典核心思想:软件实体应该是可扩展,而不是可修改。也就是说,对扩展开放,而对修改是封闭的。具体体现:对扩展开放,意味着有新需求或变化时,可以对现有代码进行扩展,以适应新的情况。对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。实现开放封闭原则的核心思想就是对抽象编程,而不是对具体编程,因为抽象是相对稳定的。让 阅读全文
posted @ 2012-12-31 15:11 Qlin 阅读(508) 评论(0) 推荐(0) 编辑
[设计模式原则]第五回:迪米特原则
摘要:1.引言迪米特法则(Law of Demeter)又叫作最少知识原则(LKP,Least Knowledge Principle),就是说一个对象应当对其他对象有尽可能少的了解,类与类之间的了解的越多,关系越密切,耦合度越大,当一个类发生改变时,另一个类也可能发生变化。2.引经据典核心思想:最少依赖具体体现:类内部应该高内聚,设置相应的权限,有选择的暴露方法,这就是封装的奥秘。类的依赖关系尽量减少,保持简单和独立,降低耦合。一些理解,有些东西,可以适当的知道,知道的太多对你不好。关系越复杂,人越不敢接近你。要达到很高的内修养,才能有很好的表现。这些江湖术语都包含一些哲理。3.应用反思 /... 阅读全文
posted @ 2012-12-29 09:21 Qlin 阅读(389) 评论(0) 推荐(1) 编辑
值对象共享(2)
摘要: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 阅读(935) 评论(0) 推荐(1) 编辑
[设计模式原则]第四回:里氏替换原则
摘要:1.引言里氏替换原则(LSP,Liskov Substitution Principle)是关于继承机制的原则,是实现开放封闭原则的具体规范,违反了里氏替换原则必然违反了开放封闭原则。2.引经据典核心思想:子类必须能够替换其基类。一些理解子类继承基类,是一种IS-A关系,只能说子类 IS-A 基类,不能反过来,该原则说的就是处理继承问题的原则。父类的非抽象方法,不应该被子类重写,重写了就会改变原来父类的方法,造成意想不到的结果,就不能完全代表父类了,如果有意要子类重写请声明虚方法或者抽象方法。3.应用反思//开关 public class Switch { ... 阅读全文
posted @ 2012-12-27 16:29 Qlin 阅读(1432) 评论(0) 推荐(2) 编辑
值对象共享
摘要:1.引言由于string使用频繁,所以微软把它实现像值类型那样方便,甚至有string驻留机制,声明相同的字符串可以指向相同的托管堆内存,这样就可以提供内存的利用率。如果有一种class类型,它只是用来表示一些特征、一些描述信息、一些数据的存储,但是它们声明了就不会去改变这个对象里面的值,那么这种类型的对象就是值对象,这样的对象就可以共享,因为它不可变。2.驻留方式string有驻留方式,值对象就跟值类型和string一样,不可变,以至于值对象可以进行共享,如果值对象也能够以驻留方式进行创建,那就可以轻松实现共享,如下例子: public class User { p... 阅读全文
posted @ 2012-12-27 13:11 Qlin 阅读(1491) 评论(28) 推荐(2) 编辑
[设计模式原则]第三回:接口隔离原则
摘要:1.引言现实中有这样一种情况,火车站窗口总是挤满了排队的人,而排队的人并非都是为了买票,有的 是咨询,有的是退票,但都必须排在这一长长的队伍中,显然安排不同的窗口处理不同的业务会大大提高效率。同样,软件设计中,胖接口强调所有的继承的类必须实现所有的方法,而有些实现的方法并非有用,这种情况对接口来说就是一种让费,而接口隔离原则(ISP,Interface Segregation Priciple)正是应对这种情况的设计标准。2.引经据典核心思想:使用多个小的专门接口,而不要使用一个大的总接口。具体而言:接口应该是内聚的,应该避免出现胖接口。一个类对另一个类的依赖应该建立在最小的接口上,不要强迫依 阅读全文
posted @ 2012-12-26 17:59 Qlin 阅读(458) 评论(0) 推荐(1) 编辑
[设计模式原则]第二回:依赖倒置原则
摘要:1.引言著名好莱坞法则:不要调用我们,我们会调用你。这是对依赖倒置原则(DIP,Dependency Inversion Principle)最形象的诠释,通过抽象机制有效解决类层次之间的关系,降低耦合的粒度,实现对抽象的依赖是依赖倒置的核心思想。2.引经据典核心思想:依赖于抽象具体体现在:高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于具体,具体应该依赖于抽象。上面两点也就是解决方案,依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。依赖倒置原则的应用可以更好的维护和扩展。3.应用反思上节 设计模式原则]第一回:单一职责原则 中提到的例子,我们来应用 阅读全文
posted @ 2012-12-25 17:16 Qlin 阅读(527) 评论(1) 推荐(1) 编辑
[设计模式原则]第一回:单一职责原则
摘要:1.引言单一职责原则(SRP,Single Responsibility Principle),强调的是职责分离,在某种程度上是对职责的理解是构成了不同类之间的耦合关系的设计关键。2.引经据典核心思想:一个类最好只做一件事,只有一个引起它变化的原因。单一职责原则可以看成是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少变化的原因。职责过多,变化的原因也就多,将导致职责之间的依赖,互相产生影响,从而极大的损伤其内聚性和耦合度。一些理解:所说的职责一般指功能,然而单一职责原则是由引起变化的原因决定,并非职责决定,这个要引起重视,不要会错意了。一个类最好只做一件事 阅读全文
posted @ 2012-12-24 16:17 Qlin 阅读(815) 评论(0) 推荐(1) 编辑
[IoC容器Unity]第四回:使用范例
摘要: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 阅读(6446) 评论(13) 推荐(10) 编辑
[IoC容器Unity]第三回:依赖注入
摘要:1.引言上节介绍了,Unity的Lifetime Managers生命周期,Unity具体实现依赖注入包含构造函数注入、属性注入、方法注入,所谓注入相当赋值,下面一个一个来介绍。2.构造函数注入Unity利用Resolve方法解析一个对象,都是调用注册类型的构造函数来初始化的,初始化时,Unity能够控制初始化的值,当然,我们要给Unity提供足够的原料,要不然也是巧妇难无米之炊,下面看一些简单的示例。先准备几个类如下: /// <summary> /// 班级接口 /// </summary> public interface IClass { s... 阅读全文
posted @ 2012-10-18 10:25 Qlin 阅读(7061) 评论(6) 推荐(5) 编辑
[IoC容器Unity]第二回:Lifetime Managers生命周期
摘要: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 阅读(9893) 评论(7) 推荐(13) 编辑
[IoC容器Unity]第一回:Unity预览
摘要:1.引言高内聚,低耦合成为一个OO架构设计的一个参考标准。高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单。拿咱国家举例来说,假如你是中国人。高内聚:就是说你跟中国亲,关系好,国家会保护你。低内聚:就是说你跟中国的关系不好,那还怎么混,改天就要批斗你,你就是个问题源。低耦合:就是说你跟日本的关系非常正常,非常简单,这样的话,就不会被骂汉奸了。高耦合:就是说你跟日本亲,活该被砸,被游街。上面例子虚构的,不太贴切,但从中可以看出来高内聚和低耦合的处境是最好的。高内聚是对内部成员跟本身这个模块的关系的描述,低耦合是对成员跟外部模块之间关系的描述 阅读全文
posted @ 2012-10-16 15:55 Qlin 阅读(13396) 评论(14) 推荐(8) 编辑
IoC模式
摘要:1.依赖依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖。如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它。下面看一个简单的示例: /// <summary> /// 用户播放媒体文件 /// </summary> public class OperationMain { public void PlayMedia() { MediaFile _mtype = new MediaFile(); Player _pl... 阅读全文
posted @ 2012-10-09 08:56 Qlin 阅读(71689) 评论(53) 推荐(75) 编辑
WEB架构师成长之路之三架构师都要懂哪些知识
摘要:Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求。 总结起来大概有下面几点技能要求:一、 架构师有优秀的编码能力,解决开发人员无法解决的难题。二、 架构师对系统的大数据容量高性能高并发高容错的网站有架构设计和开发经验。三、 架构师对操作系统、数据库、服务器各种软件使用的配置比较了解,比如Linux、Web负载均衡、反向代理、数据库集群、容灾等比较了解。四、 架构师对软件开发过程有清晰明确的认识,也就是对软件工程有有明确的认识,并能把需求进行分析、建模。五、 架构师学习能力很强、接触知识面要很宽广 阅读全文
posted @ 2012-09-14 15:39 Qlin 阅读(710) 评论(1) 推荐(0) 编辑
WEB架构师成长之路之二大牛的法宝
摘要:要成为WEB架构师,首先要找到通往成功的正确方向,详见第一篇,WEB架构师成长之路, 接下来我们就要往这个方向努力。然而如唐僧去西天取经一样,要历经种种磨难,一路上打败各种妖魔鬼怪才能继续前行,所以唐僧取经,第一件事,就是招徒弟, 遇见妖魔鬼怪就让技术高超的徒弟打败它,徒弟不听话就念紧箍咒,徒弟也搞不定的妖怪,就请观音菩萨搞定,这就是唐僧成功的法宝,没法宝上路,看来我们会死 的比较惨啊,哈哈。我们在通往架构师的路上,同样会遇到各种各样的问题,但不幸的是,没有菩萨在暗中相助,要是有牛人相助你,那老兄你太幸运了,成功几率 大大增加。但我们没 有牛人帮助,更没有技术高超的徒弟一路保驾护航,关键招徒弟 阅读全文
posted @ 2012-09-14 15:29 Qlin 阅读(492) 评论(1) 推荐(1) 编辑
WEB架构师成长之路之一走正确的路
摘要:本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路,如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员们,你们有没有下面几种感觉?一、 我的工作就是按时完成领导交给我的任务,至于代码写的怎样,知道有改进空间,但没时间去改进,关键是领导也不给时间啊。二、 我发现我的水平总是跟不上技术的进步,有太多想学的东西要学,Jquery用的人最近比较多啊,听说最近MVC比较火,还有LINQ,听说微软又有Silverlight了……三、 我发现虽然我工作几年了,除了不停的coding,Ctrl+c和Ctrl+V更 阅读全文
posted @ 2012-09-14 14:55 Qlin 阅读(691) 评论(2) 推荐(1) 编辑

1