第三章 OO之美
今天是周六, 本来说来加班的,但是经理还没有到,所以趁着这点时间,看看书吧。时间,能抓住一点,绝不放过一点。希望在不久的将来,我的技术水平能有一个大的进步,寻求进步是我的最希望得到的快乐。你,还在等什么?
这一章,看了目录,应该不是一些基础知识了,挑起了设计与架构的问题。我本人对这样的话题还是比较感兴趣的。
笔记
1、对于设计来说,或许永远没有唯一的答案,你只能无限的接近最好。
2、设计原则是设计的灵魂,而设计模式是系统开发的模板。这些面向对象的思想和应用来自于实践,完善于重构。
3、在设计的广义概念里,几个必需的概念需要了解:面型对象,面向服务(WCF),框架(基础架构),设计原则(五大原则),设计模式(23个,可以挑重点学习,深入掌握--Abstract Factory,Iterator,Singleton,Adapter,Decorator,Observer,Facade,Template,Command),模式之外(除了基本的23种,还有一些其他的模式)
4、再设计领域,你不必为看似高深的框架吓到,也不必为没有经验而怯场,在编程生涯中,你随时都可以成为一个架构者,关键是,你该随时让自己保持一个不懈怠的心,如何将所谓的MVC或者模式还有原则优雅而高效的应用到软件系统中,是一种功力和经验的经验的体现。但是凡事都要有基础,有了基本功之后再看着唱本骑驴走远吧。
5、耦合的产生:·继承 ·聚合 ·接口 ·方法调用和引用 ·服务调用
6、设计的目标:高内聚,低耦合;面向抽象编程;封装变化;实现重用:代码重用,算法重用
7、手段和思想:封装变化,面向接口、抽象、服务编程
8、就原理而言,依赖倒置要求设计:少继承多聚合,单项依赖,封装抽象,对依赖对象都应该终止于抽象类和接口。
9、Bob大叔的三点总结:(实际编程中很难完全达到)
(1)任何变量都不应该有一个指向具体类的指针或者引用。
(2)任何类都不应该从具体类继承。
(3)任何方法都应该覆写它的任何基类中已经实现的方法。
10、解构控制反转(IoC):代码的控制器交由系统控制,而不是代码内部,主要体现在框架设计上。
11、依赖注入(DI):客户类依赖于服务类的接口,并在运行时根据上下文环境,由其他组件实例化具体的服务类实例。从而实现客户类和服务类的松散耦合。
12、三种注入方式:
(1)接口注入:将对象的关系转移到一个接口,以接口注入控制(可以通过配置文件进行实例化,甚至都不需要编译)
(2)构造器注入:通过构造函数实例化抽象接口。
(3)属性注入:通过属性实例化抽象接口。
(4)其他:通过特性Attribute(待以后专门讲Attribute的时候学习)。
13、现有依赖注入框架:Unity、ObjectBuilder、Castle、Spring.net。
14、纵观模式:
15、为了解决new方式创建对象的依赖违反问题,典型的解决思路是将创建的依赖由具体转移为抽象,通常情况下有两种方式来应对:工厂模式和依赖注入。
16、面向对象和基于对象:C#,C++这样的语言是面向对象的语言,然而JavaScript这样的语言有对象的概念,但是没有继承多态这样的结构,所以只能称得上是基于对象的语言。但确实也使得JavaScript有了很大的灵活性,而且轻量级,这就是适当的好处。
17、.net闭包:初识闭包,应该是在离散数学的课堂上,它源自数据概念。而在语言系统上,主要指函数和与函数相关的上下文环境组合而成的实体。
18、函数和闭包的概念不同:闭包是函数和其上下文环境组合而成的实体,不同的引用环境和相同的函数可以组合成不同的闭包实例;函数则不会因为上下文环境而改变,因为其实一个可执行的代码体。
19、闭包的应用:
闭包引起的“错误”:
输出:666666
原因:因为闭包的存在,所以大家共享了一个i的值,即为6。这就是闭包引起的,但是这不是它不好的地方,只不过是使用者对其不了解罢了,所以说,要想使用闭包,必须要透彻的理解它,这样才不会弄巧成拙。拿着这把双刃剑尽情杀敌吧、、、
20、好代码和坏代码:命名,编码规范,命名规则,多注释,用命名空间组织你的代码,切勿模式而模式,线程安全很重要,不断的重构和思考,扩展无处不在,性能,测试,
博客地址: | http://www.cnblogs.com/HJL-Blog/ |
博客版权: | 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。 |
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! | |
再次感谢您耐心的读完本篇文章。 |