NET 分布式架構(gòu)開發(fā)實戰(zhàn)之一 故事起源
服務(wù)層:
代碼
public interface IEmployeeServices { List<Employee> GetAllEmplyees(); } public class EmployeeServices : IEmployeeServices { public List<Employee> GetAllEmplyees() { EmployeeBL employeeBL = new EmployeeBL(); return employeeBL.GetAllEmplyees(); } }
然后就是在客戶端生成代理,然后在UI中就調(diào)用了提供的方法。
客戶端的UI代碼中,而業(yè)務(wù)層中的EmployeeBL基本上沒有起到什么作用,只是起到一個過渡的作用,只是在Insert ,Update,和Delete的時候,對一些字段進行了相應(yīng)的Check和Validation,如Email格式是否正確等等。其他的一些流程的Check也是代碼的堆積,業(yè)務(wù)類很"弱"。
總的看起來就是"牽一發(fā)而動全身"的效果。
而且在開發(fā)過程,分層的好處基本沒有體現(xiàn)出來。
在業(yè)務(wù)類的設(shè)計的時候,所有的業(yè)務(wù)類都顯得比較的"弱",之所以這么說,主要是基于這樣的一個思想:
都知道,在面向“對象”設(shè)計的過程中,每個類就好比一個人,實例化一個類就好比生成了一個人,這個人可以在一出生就具備很多的能力(天生秉異),如異常處理,日志跟蹤,緩存,通用的驗證機制等等;也可以一出生什么都不會(或者只會做最基本的幾件事情)。之前的業(yè)務(wù)類實例化之后就生成一個非常普通的人。每個類都得重寫很多的基礎(chǔ)代碼,說到通用那就只是copy代碼。如果想要使得新生成的類很強大,具備很多功能,在設(shè)計的時候可以讓這些類繼承一個功能比較強大的基類。當(dāng)然繼承只是實現(xiàn)方式的一種。
現(xiàn)在Richard已經(jīng)被分到了另外的一個項目組(也是本系列文章要講述的一個項目,就稱為項目進度管理系統(tǒng)—Project Process Management(PPM)),而且擔(dān)任了架構(gòu)的設(shè)計和開發(fā)(之前的架構(gòu)設(shè)計Richard沒有發(fā)言權(quán))。有了前車之鑒,在新項目開發(fā)之前的幾個月,Ricahrd首先就開始了通用架構(gòu)的設(shè)計,目的有兩個:
1.解決之前項目的問題:不靈活,不通用,每次都做重復(fù)性的事情等。
2.結(jié)合自己的考慮,開發(fā)一個Framework,使得開發(fā)更加的快速,靈活,強大。
其實在項目真正開始了之后,不可能給你幾個月的時間去設(shè)計架構(gòu)的。其實在AIM出現(xiàn)問題之后,Richard就已經(jīng)在構(gòu)思如果開發(fā)一個通用的Framework了(”通用”--不表示就是到處可用,因為公司的一直是開發(fā)某一領(lǐng)域軟件的,比如現(xiàn)在的公司就擅長開發(fā)企業(yè)管理的一些軟件,所以開發(fā)出一個基于領(lǐng)域模型的架構(gòu)和框架還是有可能的)。Richard也想挽救AIM,由于諸多原因,想法終究只是成了想法。
在從AIM項目出來之后,Richard又開始了另外的一個項目的開發(fā),名稱我們暫時就虛擬的稱為EMS(Employee Management System),EMS項目不是很大,公司解決讓Richard一個人開發(fā)這個項目。這個項目給了Richard很多的時間來考慮架構(gòu)設(shè)計和Framework設(shè)計的時間,因為EMS項目不是很復(fù)雜,而且技術(shù)和進度都在掌控之中,在正常上班時間就可以到時候定期交付。所以每天下班之后,Richard開始加班去構(gòu)思Framework的設(shè)計,開發(fā)的時間越長,技術(shù)就應(yīng)該沉淀的越多,如以通用類庫,組件的方式或者解決問題方案的文檔等出現(xiàn)。只有這樣,下次的開發(fā)才更加的快速。
3個月下來,EMS項目完成了。而且Richard設(shè)計的Framework也有了雛形。準(zhǔn)確的說,還只能稱為 基礎(chǔ)架構(gòu)基本完成。EMS沒有采用這個Framework來開發(fā),因為Framework的設(shè)計和實現(xiàn)于EMS是同步進行的。
Richard心里是這樣認為的:設(shè)計通用的架構(gòu),然后在項目中不斷的錘煉,更新,產(chǎn)生出通用的代碼,然后演化為Framework。只有設(shè)計出了自己的Framework,以后的開發(fā)才有可能進入"光速開發(fā)"。
在這個項目開始之初,Richard就和其他幾個組員討論了如何實現(xiàn),同時也推出了自己開發(fā)的成果。商量之后,決定采用Richard的設(shè)計。
Richard在設(shè)計架構(gòu)的時候,也參考了現(xiàn)在流行的一個Framework,如Spring.NET ,CSLA.NET, Nhibernate,主要吸收它們的一些思想,同時也分析了這些Framework對自己項目的利弊。而且認為:沒有絕對萬能的技術(shù),一個架構(gòu)的實現(xiàn)需要在很多的因素之間權(quán)衡,技術(shù)不是用來show的,而是用來解決問題,這就是技術(shù)的價值。
本系列文章就展示整個構(gòu)思,設(shè)計,實現(xiàn)的過程。本系列文章所要開發(fā)的項目的價值可能不大,本系列文章的價值在于架構(gòu)的思考和設(shè)計過程,一步步的演化過程。
謝謝大家!
下篇文章:.NET 分布式架構(gòu)開發(fā)實戰(zhàn)之二 草稿設(shè)計
歡迎大家參加企業(yè)級項目開發(fā)團隊
版權(quán)為小洋和博客園所有,轉(zhuǎn)載請標(biāo)明出處給作者。
http://www.cnblogs.com/yanyangtian
轉(zhuǎn)載:http://www.cnblogs.com/yanyangtian/archive/2010/05/23/1741908.html
本文鏈接:http://m.95time.cn/tech/program/2010/7750.asp
出處:博客園
責(zé)任編輯:bluehearts
上一頁 .NET分布式架構(gòu)開發(fā)實戰(zhàn)(一) [1] 下一頁
◎進入論壇網(wǎng)絡(luò)編程版塊參加討論
|