|
平常下班時(shí)間太緊張,炒菜從洗菜到上桌也就十幾分鐘,味道自然就一般般了。到了周末,終于能花點(diǎn)時(shí)間做“大餐”了。這“大餐”之所以好吃,我覺得主要原因是食材入味深,火候勻,有時(shí)還需要經(jīng)過多種烹調(diào)方法。例如這紅燒豬蹄,就先得把豬蹄剁塊兒;鍋內(nèi)燒好了開水,把豬蹄放進(jìn)去焯。焯過的豬蹄要及時(shí)放在涼水中泡十分鐘,這樣做出來的豬蹄雖然軟但又有“筋道”的口感。然后炒鍋里放一點(diǎn)點(diǎn)油,將冰糖熬化,放入豬蹄上色。將上色的豬蹄放入高壓鍋,放入醬油,料酒,蔥姜蒜大料。壓30分鐘。而后將豬蹄連湯取出,放入炒鍋,大火收汁裝盤。(如果喜歡清甜的味道還可以在高壓鍋入鍋的時(shí)候放一顆丁香)
我這是不是發(fā)錯(cuò)地方了呢,大家說我是干嘛的。實(shí)際上我是實(shí)打?qū)嵲诖a里勞作的老農(nóng)(論年頭不少了,還好年紀(jì)尚輕)。工作中的一個(gè)項(xiàng)目,已經(jīng)進(jìn)入了第三個(gè)年頭,發(fā)布了兩次版本,積累了很多教訓(xùn)。但是最近這段時(shí)間卻非常沒有干勁兒。原來我以為我決不會(huì)淪為拼命追逐技術(shù)的變化最后筋疲力盡退出歷史舞臺(tái)的人,但是現(xiàn)在卻發(fā)現(xiàn)這種趨勢越來越明顯。這個(gè)月終于看到了Visual Studio 2012 RC的發(fā)布,但是卻沒有足夠的動(dòng)力去下載安裝爭當(dāng)“小白鼠”。
但是我終究還是下載了,果然我看到了很多很多的改進(jìn),不論從界面響應(yīng)還是Framework的變化。例如:MVC已經(jīng)升級(jí)到了4,WCF 的 REST 已經(jīng)成為了 MVC Web API,Metro Style 支持,EF 的升級(jí),等等……各類博客又出現(xiàn)了MVC4+EF組合,Web API構(gòu)造REST服務(wù),等等的各類文章。我沒精打采的看著,突然覺得,這種思路進(jìn)入的是一種惡性循環(huán)狀態(tài)。以 Web 應(yīng)用為例,從 ASP.NET -> ASP.NET MVC,這實(shí)際上僅僅是更有利于界面與邏輯分離,但是這進(jìn)步犯得著你重新書寫你的后臺(tái)嗎?當(dāng)然不用,因?yàn)镸VC對你的后臺(tái)邏輯沒有影響。我們的程序之所以能夠去賣,能夠獲得成功或者失敗,不在于你使用的是 ASP.NET MVC 還是 Web Form,或者是其他什么東西,而是你的業(yè)務(wù)實(shí)現(xiàn),你的用戶體驗(yàn)。這才是程序的價(jià)值。如果僅僅是由于架構(gòu)的變化就思考業(yè)務(wù)是不是要重新來過,未免舍本趨末。實(shí)際上,好多項(xiàng)目并沒有一個(gè)相對穩(wěn)定的Code Base,自保尚且不及,更別論進(jìn)化了。
另一個(gè)問題是——生活永遠(yuǎn)不像博客中舉的例子那樣簡單。ASP.NET Form Authentication,是干什么的?ASP.NET Role Based Authorization 能靈活配置滿足你應(yīng)用的 Access Control 需求嗎?很遺憾,Authorization 實(shí)際上是一個(gè)很復(fù)雜的問題,但是我們不能因?yàn)檫@個(gè),就覺得需求過于復(fù)雜,或者 Form Authentication / Authorization 太弱。另一個(gè)問題集中體現(xiàn)在了 Entity Framework 上。我看到了不計(jì)其數(shù)的 Repository 寫成了 Database 的 Gateway(我當(dāng)然不會(huì)笑話別人,我自己就寫成了這樣)。我也怨 Entity Framework 太弱,怎么處理外鍵?怎么處理Nested Object?為什么Enum映射這種看似“非常簡單”的功能就是遲遲出不來。但是我為什么沒有想過,Repository 是誰的 Repository?到底是 Data Set 還是 Domain Model。當(dāng)然,應(yīng)該是 Domain Model。Domain Model 和數(shù)據(jù)庫的表的對應(yīng)關(guān)系難道就是直接“拖動(dòng)”這么簡單嗎?當(dāng)然不是,那么這種復(fù)雜的映射就是你智慧的結(jié)晶,是你對業(yè)務(wù)的理解。EF很好,但是這并不是說你一定要使用EF的ObjectContext來實(shí)現(xiàn) Unit Of Work,實(shí)現(xiàn) Object Mapping。也不是說你僅僅靠輕輕的拖動(dòng)“鼠標(biāo)”就可以搞定一切領(lǐng)域模型的映射。問題都處在我們自己的懶惰和浮躁上,而不是 EF 太弱。
我錯(cuò)就錯(cuò)在了將精力集中在了芝麻而不是西瓜上,這么多的 Framework,如此多的 DSL,讓原本一些復(fù)雜的功能得到了簡化。但是這些 Framework 并不想讓你把精力集中在他們身上,而希望解放你的生產(chǎn)力,讓你把精力集中在具體的業(yè)務(wù)上。去用心的設(shè)計(jì)你的業(yè)務(wù),在業(yè)務(wù)上盡情的展現(xiàn)你對各種方法論的理解。悲哀的是,我們并沒有領(lǐng)他們的情,我們把聚光燈全都用在了他們身上,讓真正的業(yè)務(wù)邏輯穿的破破爛爛在角落里哭泣。
就拿 Authorization 來說吧,假設(shè)一個(gè)系統(tǒng)要求一種“具體”的 Role Based Access Control,我如何實(shí)現(xiàn)這個(gè)需求。別誤會(huì),這不是 ASP.NET Authorization 能搞定的。我明白相關(guān)的理論嗎?我能夠知道認(rèn)證需要那些要素嗎?這些要素將如何從 Base 上影響 Domain Model 的設(shè)計(jì)?實(shí)際上,每一個(gè)系統(tǒng)都需要的功能,往往是最具技術(shù)含量的。放下浮華,我還是回到業(yè)務(wù)邏輯上來吧,F(xiàn)ramework就像是時(shí)下流行的網(wǎng)絡(luò)用語,過幾年也許沒人記得他們。但是 Code Base 將永遠(yuǎn)發(fā)光,養(yǎng)活你和你的家,甚至養(yǎng)活大家。
就像炒菜,好菜,是要耗功夫的,沒有什么捷徑。
it知識(shí)庫:好菜都得花功夫做,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。