惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
Attack and Defense Labs
Attack and Defense Labs
WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Spread Privacy
Spread Privacy
AI
AI
宝玉的分享
宝玉的分享
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cyber Attacks, Cyber Crime and Cyber Security
爱范儿
爱范儿
Help Net Security
Help Net Security
V
Visual Studio Blog
大猫的无限游戏
大猫的无限游戏
Forbes - Security
Forbes - Security
P
Privacy & Cybersecurity Law Blog
Project Zero
Project Zero
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
T
Troy Hunt's Blog
美团技术团队
T
Threatpost
K
Kaspersky official blog
V
V2EX
Scott Helme
Scott Helme
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
T
Tailwind CSS Blog
V
Vulnerabilities – Threatpost
Last Week in AI
Last Week in AI
PCI Perspectives
PCI Perspectives
Google Online Security Blog
Google Online Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
I
InfoQ
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
L
LINUX DO - 最新话题
T
The Exploit Database - CXSecurity.com
L
LangChain Blog
S
Security @ Cisco Blogs
The Last Watchdog
The Last Watchdog
H
Hacker News: Front Page
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
TaoSecurity Blog
TaoSecurity Blog

博客园 - linkcd

linkcd胡扯职业生涯规划(二): 关于 人 linkcd胡扯职业生涯规划(一): 关于定位 如何才能用好Email? 让Switch-Case/If-Else-If-Else从你系统中走开 [翻译]每个作者都应该懂的统计学 Part I Castle.MircoKernel Class Diagram - Part I 一个不错的scheme入门PPT 人格类型 测试结果 .Net 2.0 下Data Container性能比较: Binary Serialize Dataset vs Custom Classes 智能替换DataTable.Select中会导致错误的单引号 - linkcd - 博客园 Nullable Type is an immutable type Why does Dataset NOT serialize its BinaryFormat property? (ADO.net 2.0) Undocumented Keywords in C# System.Int32&是个啥? 《4个程序员的一天》(续) 由idior的问题想到的 回FantasySoft 4个程序员的一天 Solution for SICP 在Vs.net中集成 NDoc生成的 Html Help 2帮助文档
n久以前写的火星文
linkcd · 2005-06-02 · via 博客园 - linkcd

 看了这么多书,似乎是时候总结一下前面学到的东西了吧

1. 面向对象的核心:多态
人人都知道面向对象的三要素:“封装,继承,多态”。然则,在我看来,最重要的要数“多态”了。why?封装主要是处于安全因素的考虑,而继承似乎是为了实现多态而出现的。多态,这才是标准的面向对象设计(OOD)的核心。

大师们都告诫我们,良好的设计都是“面向接口”的,这样才能保证个个模块之间是最小的耦合。一旦高层的商业逻辑依赖于底层的细节,那么,整个系统就有一种僵化性的臭味了。(同时,也违反了依赖导致原则) 一旦底层的细节发生了变化,上层无关的商业逻辑也不得不变化,传统的面向过程工程就是如此。

那么,要如何打到“面向接口”呢?这就要靠多态来完成了。Client代码只需要使用接口,而底层细节的类实现这些接口,那么,不管底层怎么变化,只要使用的多态的特性,高层的逻辑总是可以不变的。

哦,这也就是说,接口(interface)不再属于传统认识上的属于底层类,而是属于Client(高层)了

2.控制反转(回调函数)
在我开始看设计模式之前,一看到“好莱坞模式”:don’t call us, we will call you, 我总是摸不着头脑。

不过,现在我总算是多少入了点门。(这也要感谢《程序员》里熊节的系列文章)。控制反转,也就是把程序流程的控制权由客户移到了框架里去。

.net里面,C#利用Delegate来实现事件的处理,这就是回调函数。如果你想要响应某个事件的化,只要把你的事件处理函数用 Delegate封装,然后和Event链接在一起。那么,只要事件发生,利用Delegate的组播特性,就可以方面的实现对每个注册的 EventHandler的调用(这就是“we will call you”了亚)

不过,不知道Java里面是如何实现event处理的,以后要研究研究。

3.控制反转(续)
在我作毕业设计的时候,为了对Transaction进行单元测试,我使用了Interface来替换IDatabase。在UnitTest的时候,我使用了一个实现了Idatabase的MockDB来模拟Database。在代码实际运行的时候,我只需要用真实的DataAccess层里面的,同样实现了Idatabase接口的类来替换MockDB就行了。

然,在我看了最新的一起《程序员》上面Flower的文章后,才发现这就是控制反转的一种亚。傑傑傑,我不禁自鸣得意了一番:看来我和大师也想到一起去了亚。

不过,再想想,我只是无意识的使用,而大师是有理论的提出了这个观点,这就是差距..555....

4.设计模式
我并没有买《设计模式》这本书,因为感觉里面的图不是标准的UML图。-_-b 也许GOF的第2本设计模式要好些

关于设计模式,我大多是从Bob大叔的那本《敏捷开发:原则,模式,实践》里面学到的。

其实,我现在体会到,如果在项目中随意使用设计模式,完全可能陷入“过度设计”的陷阱,这也是我最怕的一件事。Kent也说过,这也是一种臭味:“不必要的复杂性”。

有前辈说过,学设计模式,有几大阶段:初期,写任何东西都是模式;后期,不再为了模式而模式。(大致如此,原话忘了......)

所以,OOD的原则:单一职能原则SRP,开放/封闭原则OCP,依赖倒置原则DIP,Liskov替换原则LSP,接口分离原则ISP,这些才是OOD的精华。真感谢Bob大叔为我们总结出了这些!

不过,就我这个初学者而言,我现在能理解的模式就那么几个,其他的?慢慢来吧

5.单元测试
Kent的大作:《TDD》,我买的e文版,看起来实在有些头痛.(这要怪我未夠班的E文,不过我读《Refactoring》的时候,感觉Flower的文笔要kent好懂亚)在TDD里,Kent把UnitTest First的原则发挥到了极至。

我能够理解TDD对于解除模块间的耦合,的确很有帮助(为了能UnitTest,你不得不写出高内聚,低耦合的类),我在毕业设计中,也采用的是TDD的方法。

不过,我似乎感觉TDD的长处在于解决底层细节,要考虑整个项目的整体框架的话,只靠TDD是肯定不行的...

PS:.net下面的Xunit成员:NUnit,的确很好用,他们的开发人员也很热情~~(再次为自己关于Exception的廢柴问题感到脸红)。希望以后能对这个开源项目作出自己的贡献

6.单元测试和重构
很简单,这两者的关系是,没了单元测试,就不可能有重构。(附加一句,重构的目的就是设计模式...胡,全部交织在一起了)

重构的确能明晰整个代码的可读性,而单元测试也保证了重构的安全,他可以防止你在重构时,无意中破坏掉什么功能。

嗯,先就写这么多吧。 很崇拜敏捷联盟的各个大师,他们的提出思路总是有一种让我醍醐灌顶的感觉。很希望在实际工作中也能继续实践到敏捷开发的方法,

不过,在我身边,真的很难找到同样对敏捷开发有兴趣的同学....很多人连UnitTest都没有听说过...

是我的兴趣脱离了实际情况么?我不知道