向软件架构大师致敬
最近在研究企业级软件架构设计,在Chinapub上挑选一番后,出手买下两本:
《Patterns of Enterprise Application Architecture》,by Martin Fowler
《Microsoft.NET: Architecting Application for the Enterprise》,by Dino Esposito & Andrea Saltarello
Martin Fowler,他的Refactoring,他的UML Distilled,每每读到他的文字,绝对是醍醐灌顶,竟会让人产生“执子之手,与子偕老”的冲动。(别想歪了,俺是纯爷们,不是gay)
Martin Fowler 和 Kent Beck都是俺很敬重的Agile开发领域的宗师级人物。在开发语言方面,这老哥俩似乎更偏好SmallTalk和Java呀。
那边厢的Anders Hejlsberg一听这个准不答应了:咋地,俺家老疙瘩C#就是后娘养的呀?!Anders大叔,别上火,有我一直在跟您混,知足吧!
Anders可是俺最最最最最崇拜的开发语言设计大师呀,不是有那么句话吗“生子当如Anders”!
当年Gates可是开着豪华加长大limo明目张胆地去Borland总部挖来的Anders呀
说跑题鸟,赶紧拉回来。
Martin Fowler在江湖上以Fowler立腕(不用Martin想来是为了与另一位敏捷开发大师Robert C. Martin相区别吧)。
Dino Esposito,这位笑面虎一般的Italian Guy还真不是盖的,ASP.NET方面的大拿,用英语写出的文字幽默而流畅,这个从前言就看得出来。
Dino Esposito江湖人称Dino。
虽说Fowler的书通俗易懂得都可以比拟白居易的诗了,但毕竟这是本拿了Jolt大奖的经典著作,题目涵盖的范围也够大,让俺好生敬畏,愣是没敢直接下手。
而Dino的书既有Microsoft和.NET的Label,又和Fowler讲的是同类问题,想必会容易些吧。那就先拿它入门咯,然后再啃Fowler。
实践证明,俺的最初判断也是没有错滴。
Dino的前三章对“Architects and Architecture”、“UML Essentials”、“Design Principles and Patterns”都有精彩的讲述,选用的代码也短小精当,阅读体验非常好。可是在第四章“The Business Layer”里一讲Domain Model Pattern就让俺心里开始犯嘀咕,直到见了Summary的面我也还是一头雾水:
既然Domain Model是对底层数据包装和相关操作的高度抽象,可是谁又来对用户所关心的Business进行建模呢?拿什么来确保采用了Domain Model Pattern的Business Layer能够名副其实呀?翻遍了第四章俺也没找出个答案。
幸好Dino提到了The Business Layer里用到的模式都是源自Fowler的大作,并标出了各模式在该书中的页码。
看来俺只好求助于Fowler大叔了。翻到指定的第116页,果然是对Domain Model Pattern的描述。不过在翻看目录时,我发现在前面的第25页开始专门有一章“Organizing Domain Logic”。既然是个总括,那咱就先从25页开始看吧。这一看可就看到真东西了。Fowler先强调了一个Service Layer的存在:A common approach in handling domain logic is to split the domain layer in two. A service layer is placed over an underlying domain model or table module...The presentation logic interacts with the domain purely through the Service Layer, which act as an API for the application. 最后又指出:My preference is thus to have the thinnest Service Layer you can, if you even need one. 阅读至此,先前疑虑烟消云散,畅快淋漓呀!
再回看Dino的书,第四章“The Business Layer”之后其实就跟上了个第五章“The Service Layer”,里面也表达了和Fowler相同的意思。虽然从整体来讲,Dino没有遗漏知识点,但谋篇布局中的欠妥当着实让俺郁闷了一把。
瑕不掩瑜,Dino的书还是很不错的,BLL里其他3个模式:Transaction Script、Table Module和Active Record讲的都很明白。
说来说去,还是Fowler同志棋高一招啊。或许当初应该从他下手?who knows!
正所谓:Dino真牛人,Fowler纯大师。