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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 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都没有听说过...

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