摘要:
一个windowsphone的开源项目,一个日历的小控件https://windowphonecalendar.codeplex.com/ 阅读全文
摘要:
不应该强迫客户依赖于它们不用的方法。接口隔离可以让用户端仅仅关注行为,而不是实现这种行为的对象。例如有一个功能:一个闹钟,当定时器超时的时候闹钟会响; 1 class Bell 2 { 3 void Ring() 4 { 5 6 } 7 } 8 9 class Timer10 {11 void onTimeOut(Bell b)12 {13 b.Ring();14 }15 }这里面两个问题,第一、定时器超时是一个timer类... 阅读全文
摘要:
依赖倒置原则的含义高层模块不应该以来与底层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。下图的结构就违反了DIP原则,因为上层的client依赖于DB service,从而一来到DB如果DB发生了变化,就需要修改DB service,从而修改client。好的设计师中间这几层全部依赖于借口。这样就算DB发生了变化也不会对DBservice有所影响。 阅读全文
摘要:
用一个子类来代替基类,程序的行为不变,那么就符合里氏替换。最常见的违反里氏替换原则的例子:子类存在空的虚函数即一个子类对于基类的某些方法进行屏蔽将其改成空函数。也成为子类的退化。里氏替换的意义在于更好的实现OCP。如果我们的子类不能完全的代替基类,那么基类的抽象就是有问题的,必然会导致,在拓展子类功能的时候需要修改基类。判断是否符合里氏替换的方法是判断两个类是否存在IS-A的关系,即子类是一个基类吗?比如说,鸭子是鸟吗?但符合IS-A的关系的对象不一定符合里氏替换。还要看对象的特性,即可能产生变化的和地方。比如说正方形是一个长方形,这个事没有问题的。 1 class Rectangle... 阅读全文
摘要:
软件应该是可以扩展的,但是不可以修改的。对扩展都是开放的,模块式可以扩展来满足新的行为,我们可以改变模块的功能。OCP的好处是,尽可能的减少修改模块的次数和范围,从而提高代码的可维护性,复用性。比如操作系统的升级补丁,在修复bug的情况下,肯定是越小越小。如果说OCP做的不好,每次修改需要修改大量的文件,那就会导致补丁很大。对于修改是封闭的,在扩展模块的时候,不必改动源代码的二进制文件,不管是.o文件还是.dll文件都不用改动。问题的核心是怎么样改变了模块的功能却又不改变模块的代码呢?关键是抽象!比如说,client类会调用server的一些接口,这样就会对server产生依赖,如果想换一个s 阅读全文
摘要:
首先什么是职责,在这里,职责就是变化的原因。一个类应该仅有一个引起他变化的原因。单一职责也称之为内聚性,内聚性的定义为一个模块组成元素之间的功能相关性。简单的说,单一职责就是说一个模块组成元素之间的相关性应该是很强的,或者说他们只有一种相关性。1 class Rectangle2 {3 void Draw();4 double Area();5 }在上面的代码中,长方形有两个方法,一个是绘画,一个是计算面积;这个实际上违反了单一职责,因为,画图时涉及到界面展示的部分,而面积是数学模型的计算。将两个职责分开1 class Geome... 阅读全文
摘要:
这个东西很神奇, 没有想明白他是怎么实现的。1 public static class StrEx2 {3 public static void fun(this string s)4 {5 Console.WriteLine("fool invoke {0}", s);6 }7 }一个类,随便定义,对边定义一个静态函数。 void fun(this string s) 这里一定要加this然后:1 static void Main(string[] args)2 {... 阅读全文
摘要:
界面上来说VS2012变化很大,给人的第一感觉就是“版璞归真”。初始界面是白色但是你也看到了,开始页的黑色很不协调,于是我果断改变成暗主题。就在OPTION中就可以改变修改后全部变成黑色,让我想起了老一辈程序员编程的DOS界面,呵呵。不过没有找到我想要的东西——WIN8的SDK,上网查了一下,必须要单独安装才可以,就像WP7一样,看到截图的迅雷了么,快下好了,哈哈。 阅读全文
摘要:
可空类型就是说这个类型的变量时可以为空的;比如说int a;这里的a无论怎么样也会有个值;但是可空类型就不一样了int? a;a 有可能为null;可空的运算int? a;int? b;int? c = a + b;运行的结果也要为int?,都则不会被编译。如果要和其他运算符转化,需要显示转化;int? a;int b;int c = (int)a + b;如果a为null的时候,c为null,但是如果a为bool的时候,可进行& 和 | 的元算。“??”表达式int? a;int? b;a ?? b;a == b ? a:b;上面两个表达式是一个意思。 阅读全文
摘要:
我安装了VS2010,也安装了WP SDK,但是新建项目中没有看到 “silverlight for windows phone” 模板大概是这样的,什么时候会发生这种情况呢,当你装的VS 和 WP SDK的语言不是同一种语言的时候, 会发生这样的情况。我就是VS是中文版,WP SDK是英文版,出现了这种情况。解决方案:若是英文版VS+中文版 WP SDK在\安装路径\Microsoft Visual Studio 10.0\Common7\IDE\ProjectTemplates\CSharp\Silverlight for Windows Phone找到2052目录,复制一份改名为103. 阅读全文