4月 13
经过一周的纯正PHP5环境下的工作,我确定了自己现在的事情:
把现有的环境当成试验场。
前一阵学习了不少的重构,设计模式等只是,但是,以前的开发一直要考虑PHP4的兼容性,故而在编码上看起来不伦不类的。受到语言限制,也有诸多的模式实现起来非常困难或者诡异。现在我可以大胆的进行完整的OOP。
把所有沉睡的知识召唤醒来吧!
UML,OOP,PHP5,Design patterns,Refactoring...
Defined tags for this entry: , , ,

作者 rollenc

Bookmark 试验场  at del.icio.us Digg 试验场 Mixx 试验场 Bloglines 试验场 Technorati 试验场 Fark this: 试验场 Bookmark 试验场  at YahooMyWeb Bookmark 试验场  at Furl.net Bookmark 试验场  at reddit.com Bookmark 试验场  at blinklist.com Bookmark 试验场  at Spurl.net Bookmark 试验场  at NewsVine Bookmark 试验场  at Simpy.com Bookmark 试验场  at blogmarks Bookmark 试验场  with wists Bookmark 试验场  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
4月 12
新的环境,新的要求,也需要新的能力去配合。
现在开始,从靠近Javascipt和用户体验的角色退回到PHP开发。
从目前的工作内容来看,有喜亦忧。从程序上面编写来说,完全的面向对象思想和语法,这将促进自己在思维习惯上的扩展。但操作内容与数据太接近,主要处理后台的数据管理和分析等,比较单调和乏味。也背离了自己在半年多来对用户体验的研究优势。
经过了几天的熟悉,实际感觉与期待中的距离还比较远。对代码的熟悉基本上使用代码走查的方式进行,注释也少,文档基本等于0。好在其函数名称起的都不错,属于自说明型的。这个减少了不少的阅读压力。

从自己未来的方向来讲,也有些迷茫,不是找不到方向,而是目前可以选择的太多,我不知道自己该去如何把握。
不想了,先学习吧。从知识面的广度上想想,开卷总是有益的。
Defined tags for this entry: ,

作者 rollenc

Bookmark 专注于新的学习  at del.icio.us Digg 专注于新的学习 Mixx 专注于新的学习 Bloglines 专注于新的学习 Technorati 专注于新的学习 Fark this: 专注于新的学习 Bookmark 专注于新的学习  at YahooMyWeb Bookmark 专注于新的学习  at Furl.net Bookmark 专注于新的学习  at reddit.com Bookmark 专注于新的学习  at blinklist.com Bookmark 专注于新的学习  at Spurl.net Bookmark 专注于新的学习  at NewsVine Bookmark 专注于新的学习  at Simpy.com Bookmark 专注于新的学习  at blogmarks Bookmark 专注于新的学习  with wists Bookmark 专注于新的学习  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
3月 9
卓越网购买了两本书,前天下的订单,晚上付款,今天上午拿到手上了。
一本Head First Design Patterns, 一本是代码大全(第二版),两本书前段时间都看了会电子版,不过眼睛太累了,还是纸质的要舒服,“养眼”:)
Defined tags for this entry:

作者 rollenc

Bookmark 新购了两本书,纪念一下  at del.icio.us Digg 新购了两本书,纪念一下 Mixx 新购了两本书,纪念一下 Bloglines 新购了两本书,纪念一下 Technorati 新购了两本书,纪念一下 Fark this: 新购了两本书,纪念一下 Bookmark 新购了两本书,纪念一下  at YahooMyWeb Bookmark 新购了两本书,纪念一下  at Furl.net Bookmark 新购了两本书,纪念一下  at reddit.com Bookmark 新购了两本书,纪念一下  at blinklist.com Bookmark 新购了两本书,纪念一下  at Spurl.net Bookmark 新购了两本书,纪念一下  at NewsVine Bookmark 新购了两本书,纪念一下  at Simpy.com Bookmark 新购了两本书,纪念一下  at blogmarks Bookmark 新购了两本书,纪念一下  with wists Bookmark 新购了两本书,纪念一下  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
3月 4
* 为显示世界中的对象建模
* 为[[抽象]]的对象建模
* 降低[[复杂度]]
* 隔离复杂度
* 隐藏实现细节
* 限制变动的影响范围
* 隐藏全局数据
* 让参数传递更顺畅
* 建立中心控制点
* 让代码更易于重用
* 为程序族作计划
* 把相关操作包装到一起
* 实现某种特定的[[重构]]

应该避免的类
* 避免创建万能类
* 消除无关紧要的类 (降级为其他类的成员)
* 避免用动词命名的类 (降级为其他类的子程序)

知识来源: 《代码大全2》 P152-156
Defined tags for this entry:

作者 rollenc

Bookmark 创建类的原因  at del.icio.us Digg 创建类的原因 Mixx 创建类的原因 Bloglines 创建类的原因 Technorati 创建类的原因 Fark this: 创建类的原因 Bookmark 创建类的原因  at YahooMyWeb Bookmark 创建类的原因  at Furl.net Bookmark 创建类的原因  at reddit.com Bookmark 创建类的原因  at blinklist.com Bookmark 创建类的原因  at Spurl.net Bookmark 创建类的原因  at NewsVine Bookmark 创建类的原因  at Simpy.com Bookmark 创建类的原因  at blogmarks Bookmark 创建类的原因  with wists Bookmark 创建类的原因  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
3月 4
Containment
* 通过包含来实现“有一个/has a”的关系
* 在万不得已时通过private继承来实现“有一个”的关系
* 警惕有超过约7个数据成员的类
Inheritance
* 用public继承来实现“是一个/is a”的关系
* 要么使用继承并进行详细说明,要么就不要用它
* 遵循Liskov替换原则LSP
* 确保只继承需要继承的部分
* 不要覆盖一个不可覆盖的成员函数
* 把公用的接口、数据及操作放到继承树中尽可能高的位置
* 只有一个实例的类是值得怀疑的(特例:单件模式)
* 只有一个派生类的基类也值得怀疑 (提前设计)
* 派生后覆盖了某个子程序,但在其中没有任何操作,这种情况也值得怀疑
* 避免让继承体系过深
* 尽量使用多态,避免大量的类型检查
* 让所有的数据都是private(而非protected)

知识来源: 《代码大全2》 P143-P148
Defined tags for this entry:

作者 rollenc

Bookmark 包含和继承  at del.icio.us Digg 包含和继承 Mixx 包含和继承 Bloglines 包含和继承 Technorati 包含和继承 Fark this: 包含和继承 Bookmark 包含和继承  at YahooMyWeb Bookmark 包含和继承  at Furl.net Bookmark 包含和继承  at reddit.com Bookmark 包含和继承  at blinklist.com Bookmark 包含和继承  at Spurl.net Bookmark 包含和继承  at NewsVine Bookmark 包含和继承  at Simpy.com Bookmark 包含和继承  at blogmarks Bookmark 包含和继承  with wists Bookmark 包含和继承  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
3月 4
创建高质量的类,第一步,可能也是最重要的一步是创建一个好的接口。这也包括了创建一个可以通过接口来展现的合理抽象,并确保细节仍被隐藏在抽象背后。
抽象通过提供一个可以让你忽略实现细节的模型来管理复杂度,而封装则强制阻止你看到细节。

创建类的抽象接口的指导建议:
* 类的接口应该展现一直的抽象层次。
* 一定要理解类所实现的抽象是什么
* 提供成对的服务
* 把不相关的信息装一道其他类中
* 尽可能让接口可变成,而不是表达语义
* 谨防在修改时破快就口的抽象
* 不要添加与接口抽象不一致的公用成员
* 同时考虑抽象性和内聚性

良好的封装的指导建议:
* 尽可能地限制类和成员的可访问性
* 不要公开暴露成员数据
* 避免把私用的实现细节放入类的接口中
* 不要对类的使用着作出任何假设
* 避免使用友元类(friend class C++)
* 不要因为一个子程序里仅使用公用自程序,就把它归入公开接口
* 让阅读代码比编写代码更方便
* 要格外警惕从语义上破快封装性
* 留意过意紧密的耦合关系


知识来源:《代码大全2》 P133-143
Defined tags for this entry:

作者 rollenc

Bookmark 类的接口指导建议  at del.icio.us Digg 类的接口指导建议 Mixx 类的接口指导建议 Bloglines 类的接口指导建议 Technorati 类的接口指导建议 Fark this: 类的接口指导建议 Bookmark 类的接口指导建议  at YahooMyWeb Bookmark 类的接口指导建议  at Furl.net Bookmark 类的接口指导建议  at reddit.com Bookmark 类的接口指导建议  at blinklist.com Bookmark 类的接口指导建议  at Spurl.net Bookmark 类的接口指导建议  at NewsVine Bookmark 类的接口指导建议  at Simpy.com Bookmark 类的接口指导建议  at blogmarks Bookmark 类的接口指导建议  with wists Bookmark 类的接口指导建议  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
3月 3
* 辨识对象及其属性(method && data)
* 确定可以对各个对象进行的操作
* 确定对象的哪些部分对其他对象可见——public && private
* 定义每个对象的公共接口public interface

这些步骤并无须以特定的顺序来完成,需迭代。

知识来源: 《代码大全2》 P88-89
Defined tags for this entry:

作者 rollenc

Bookmark 使用对象进行设计的步骤  at del.icio.us Digg 使用对象进行设计的步骤 Mixx 使用对象进行设计的步骤 Bloglines 使用对象进行设计的步骤 Technorati 使用对象进行设计的步骤 Fark this: 使用对象进行设计的步骤 Bookmark 使用对象进行设计的步骤  at YahooMyWeb Bookmark 使用对象进行设计的步骤  at Furl.net Bookmark 使用对象进行设计的步骤  at reddit.com Bookmark 使用对象进行设计的步骤  at blinklist.com Bookmark 使用对象进行设计的步骤  at Spurl.net Bookmark 使用对象进行设计的步骤  at NewsVine Bookmark 使用对象进行设计的步骤  at Simpy.com Bookmark 使用对象进行设计的步骤  at blogmarks Bookmark 使用对象进行设计的步骤  with wists Bookmark 使用对象进行设计的步骤  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
3月 3
1. 寻找显示世界中的[[对象]] FFind Real-World Objects 相关:使用对象进行设计的步骤
2. 形成一直的抽象 Form Consistent Abstractions (在子程序接口、类接口的以及包接口的层次上进行抽象)
3. [[封装]]实现的细节 Encapsulate Implementation Details
4. 当[[继承]]能简化设计时就继承 Inherit -- When Inheritance Simplifies the Design
5. 信息隐藏 Information Hiding (隐藏复杂度,类的接口应该尽可能少的暴露其内部工作机制)
6. 找出容易改变的区域 Identify Areas Likely to Change
7. 保持松散[[耦合]] Keep Coupling Loose (耦合标准: 规模,可见性。灵活性; 耦合种类:简单数据参数耦合,简单对象耦合,对象参数耦合,语义耦合)
8. 查阅常用的[[设计模式]] Look for Common Design Patterns
9. 高[[内聚|内聚性]] Aim for Strong Cohesion
10. 构造分层结构 Build Hierarchies
11. 严格描述类契约 Formalize Class Constracts
12. 为对象分配职责 Assign Responsibilities for Objects (每一个对象该对什么负责,这个对象应该隐藏些什么信息)
13. 为测试而设计 Design for Test
14. 避免失误 Avoid Failure
15. 有意识地选择绑定时间 Choose Binding Time Consciosly ()
16. 创建中央控制点 Make Central Points of Control
17. 考虑使用蛮力突破 Consider Using Brute Force (拿不准时,用蛮力解决 ——Butler Lampson)
18. 画一个图 draw a Diagram
19. 保持设计的模块化 Keep Your Design Modular

知识来源: 《代码大全2》 P87-110
Defined tags for this entry:

作者 rollenc

Bookmark 设计构造块:启发式方法  at del.icio.us Digg 设计构造块:启发式方法 Mixx 设计构造块:启发式方法 Bloglines 设计构造块:启发式方法 Technorati 设计构造块:启发式方法 Fark this: 设计构造块:启发式方法 Bookmark 设计构造块:启发式方法  at YahooMyWeb Bookmark 设计构造块:启发式方法  at Furl.net Bookmark 设计构造块:启发式方法  at reddit.com Bookmark 设计构造块:启发式方法  at blinklist.com Bookmark 设计构造块:启发式方法  at Spurl.net Bookmark 设计构造块:启发式方法  at NewsVine Bookmark 设计构造块:启发式方法  at Simpy.com Bookmark 设计构造块:启发式方法  at blogmarks Bookmark 设计构造块:启发式方法  with wists Bookmark 设计构造块:启发式方法  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
3月 1
Identify Areas Likely to Change

1.找出看起来容易变化的项目
  如果需求做得很好,那么其中就应该包含一份潜在变化的清单,以及其中每一项变化发生的可能性。如果需求中没有包含潜在变化,那么参考下面的“在任何项目中都容易发生变化的区域”;
2.把容易变化的项目分离出来。把第一部中找出的容易变化的组件单独划分成类,或者和其他容易法神变化的组件划分到同一个类中;
3.把看起来容易变化的项目隔离开来。设法设计好类之间的借口,使其对潜在的变化不敏感。设计好类的接口,把变化限制在类的内部,且不会影响类的外部。任何使用将会变化的类的其他类都不会察觉到变化的存在。类的接口承担保护类的隐私指责,即封装变化。

在任何项目中都容易发生变化的区域:
1. 业务规则 很容易成为软件频繁变化的根源。
2. 对硬件的依赖性。
3. 输入和输出。
4. 非标准的语言特性。
5. 困难的设计区域和构建区域。
6. 状态变量
不要使用boolean变量作为状态变量
使用访问器子程序取代对状态变量的直接检查
7. 数据量的限制

找出容易变化的区域的办法:
1. 首先找出程序中可能对用户有用的最小子集。这一子集构成系统的核心,不容易发生改变;
2. 接下来,用微小的步伐增量扩充这个系统。
3. 当考虑功能上的改变时,同样也要考虑质的变化:比如多线程安全,程序本地化等。
4.潜在的改进区域构成了系统中的潜在变化,请依据信息隐藏的原则来设计这些区域。
通过首先定义清楚核心,你可以认清哪些组件属于附加功能,这事就可以把它们提取出来,并把它们的可能改进隐藏起来。

知识来源: 《代码大全2》 P97-99
Defined tags for this entry:

作者 rollenc

Bookmark 找出容易改变的区域  at del.icio.us Digg 找出容易改变的区域 Mixx 找出容易改变的区域 Bloglines 找出容易改变的区域 Technorati 找出容易改变的区域 Fark this: 找出容易改变的区域 Bookmark 找出容易改变的区域  at YahooMyWeb Bookmark 找出容易改变的区域  at Furl.net Bookmark 找出容易改变的区域  at reddit.com Bookmark 找出容易改变的区域  at blinklist.com Bookmark 找出容易改变的区域  at Spurl.net Bookmark 找出容易改变的区域  at NewsVine Bookmark 找出容易改变的区域  at Simpy.com Bookmark 找出容易改变的区域  at blogmarks Bookmark 找出容易改变的区域  with wists Bookmark 找出容易改变的区域  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
2月 10
想起了高中时期的题海战术。
我还不是命题人,我还不具备创意的能力和机会。
自己磕磕碰碰也许能找到答案,但是既然能够知道已经有答案了,为什么不直接去找,然后理解之。
举一反三,我需要更多的一,也需要二来理解一,更需要三来熟悉一。所以,我需要的还不只是一。
我需要经验。
Defined tags for this entry:

作者 rollenc

Bookmark 我需要经验  at del.icio.us Digg 我需要经验 Mixx 我需要经验 Bloglines 我需要经验 Technorati 我需要经验 Fark this: 我需要经验 Bookmark 我需要经验  at YahooMyWeb Bookmark 我需要经验  at Furl.net Bookmark 我需要经验  at reddit.com Bookmark 我需要经验  at blinklist.com Bookmark 我需要经验  at Spurl.net Bookmark 我需要经验  at NewsVine Bookmark 我需要经验  at Simpy.com Bookmark 我需要经验  at blogmarks Bookmark 我需要经验  with wists Bookmark 我需要经验  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
2月 8
Levels of Design

1.软件系统 Software System
2.分解为子系统或包 Division into Subsystem or Package :
分解为数据库、用户界面、业务规则、命令解释器、报表引擎等。
目标:确定如何分解以及各个子系统如何协作。
重点:子系统之间的相互通信规则
基本原则:子系统图应该是无环图
PS:我更喜欢按功能来划分子系统,比如用户模块,业务模块,客服模块,管理模块等,而以上所谈到的数据库模块等等知识属于公用的底层模块部分。
3.分解为类 Division into Classes
目标:识别出系统中所有的类,识别接口
4.分解成子程序 Division into Routines
目标: 细化出私有函数,子程序。
也有可能再返回第3层设计
5.子程序内部的设计 Internal Routine Design
目标:具体实现。
包括编写为代码,选择算法、组织子程序内部的代码块以及编码。

知识来源: 《代码大全2》
Defined tags for this entry:

作者 rollenc

Bookmark 设计的层次  at del.icio.us Digg 设计的层次 Mixx 设计的层次 Bloglines 设计的层次 Technorati 设计的层次 Fark this: 设计的层次 Bookmark 设计的层次  at YahooMyWeb Bookmark 设计的层次  at Furl.net Bookmark 设计的层次  at reddit.com Bookmark 设计的层次  at blinklist.com Bookmark 设计的层次  at Spurl.net Bookmark 设计的层次  at NewsVine Bookmark 设计的层次  at Simpy.com Bookmark 设计的层次  at blogmarks Bookmark 设计的层次  with wists Bookmark 设计的层次  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!
2月 8
Desirable Characteristics of a Design

1.最小的复杂度 Minimal complexity: 应该作出简单而易于理解的设计,避免“聪明的”设计,“聪明的”设计往往是难以理解的。
2.易于维护 Ease of maintenance : 考虑做维护工作的程序员会提出的问题。
3.松散耦合 loose coupling 人那个程序各个组成部分之间关联最小。实现手法: 抽象接口,合理封装,信息隐藏等。
4.可扩展性 extensibility : 可以改动系统的一部分而不会影响到其他部分。
5. 可重用性 reusebility : 该系统组成部分能够在其他系统中使用。
6. 高扇入 high fan-in 可以让大量的类使用某个给定的类,系统可以很好的利用较低层次上的工具类
7.底扇出 low fan-in :一个类少使用其他的类。大于7为高扇出,导致系统复杂。
8.可移植性 protability : 方便地移植到其他环境。
9.精简性 leanness : 没有对于部分,关键问题: “这虽然简单,但把它加进来之后会损害什么呢?"
10.层次性 stratification : 可以在任何层面上观察系统并得到一致性看法。可以在任意参差上观察而不需要进入其他层次。

知识来源:《代码大全2 》
Defined tags for this entry:

作者 rollenc

Bookmark 理想的设计特征  at del.icio.us Digg 理想的设计特征 Mixx 理想的设计特征 Bloglines 理想的设计特征 Technorati 理想的设计特征 Fark this: 理想的设计特征 Bookmark 理想的设计特征  at YahooMyWeb Bookmark 理想的设计特征  at Furl.net Bookmark 理想的设计特征  at reddit.com Bookmark 理想的设计特征  at blinklist.com Bookmark 理想的设计特征  at Spurl.net Bookmark 理想的设计特征  at NewsVine Bookmark 理想的设计特征  at Simpy.com Bookmark 理想的设计特征  at blogmarks Bookmark 理想的设计特征  with wists Bookmark 理想的设计特征  at Ma.gnolia.com wong it! Bookmark using any bookmark manager!