[原创].NET 分布式架构开发实战之一 故事起源
閱讀: 1320 評論: 18 作者: 小洋(燕洋天工作室) 發表于 2010-05-23 09:03 原文鏈接
.NET 分布式架構開發實戰之一 故事起源
?
前言:本系列文章主要講述一個實實在在的項目開發的過程,主要包含:提出問題,解決問題,架構設計和各個邏輯層的實現以及新問題的出現和代碼的重構。本系列文章以故事的形式展開,而且文章列舉的很多項目的名稱,大家也不用太關心,很多都是虛擬的。
?
?????? 本篇主要講述項目的一些背景。
?????? 新人Richard被分配到了一個企業自動化信息管理項目組--Automation Information Management Project(后面簡稱AIM),當Richard進入項目組的時候,這個項目已經開始了,項目的架構也已經在兩周之前構建好了--SOA架構,而且使用的主要技術也敲定了:WCF, Linq.
?????? 注:因為項目是首次采用"新技術"(因為以前沒有使用WCF,Linq,所以被稱為新技術),項目就這樣開始進行了。
?
?????? 半年之后問題就開始出現了(其實問題就一開始就出現了,只是大家還認為問題不大):因為當初在設計的時候,項目的架構是由項目組的其他兩個人設計的,整個項目開發基本上就沒有采用面向對象的思想來開發,而且雖然在架構設計上分了:數據層,業務層,服務層,和UI層,但是各層之前是緊緊的耦合,可以說是“牽一發而動全身”:如數據訪問層稍微一改,業務層就跟著動,然后改變一層層的開始波及。
?
?????? 大家都開始覺得這樣很累,但是項目已經做到這個階段了,不可能重來。每次新需求一來,項目的的改動可以說是天翻地覆。而且當初設計架構的那位仁兄也就項目一開始的一個月后就走了。
?
?????? 下面的圖就展示項目中的架構設計:
??????
?咋一看起來還是不錯的,一般的架構都是這樣設計的。下面就開始講述它們之間的一些調用關系,看看有什么問題:
?????? 數據訪問層:
??????
?
????public?class?EmployeeDAL????{
????????public?List<Employee>?GetAllEmplyees()
????????{
????????????//...
????????}???????????
????}
?
??????
?????? 其中Employee就是Linq生成的一個實體對象。
?
?????? 業務層:
?
??????
代碼 ????public?class?EmployeeBL????{
????????public?List<Employee>?GetAllEmplyees()
????????{
????????????EmployeeDAL?employeeDAL?=?new?EmployeeDAL();
????????????return?employeeDAL.GetAllEmplyees();
????????}
????}
?
?
?????? 服務層:
??????
???????
?
代碼 ????public?interface?IEmployeeServices????{
????????List<Employee>?GetAllEmplyees();
????}
????public?class?EmployeeServices?:?IEmployeeServices
????{
????????public?List<Employee>?GetAllEmplyees()
????????{
????????????EmployeeBL?employeeBL?=?new?EmployeeBL();
????????????return?employeeBL.GetAllEmplyees();
????????}
????}
?
?
?????? 然后就是在客戶端生成代理,然后在UI中就調用了提供的方法。
?
?????? 現在一個最明顯的問題就是:把數據層的數據實體Employee一層層的傳遞,最后到了客戶端的UI代碼中,而業務層中的EmployeeBL基本上沒有起到什么作用,只是起到一個過渡的作用,只是在Insert ,Update,和Delete的時候,對一些字段進行了相應的Check和Validation,如Email格式是否正確等等。其他的一些流程的Check也是代碼的堆積,業務類很"弱"。
?
?????? 總的看起來就是"牽一發而動全身"的效果。
?????? 而且在開發過程,分層的好處基本沒有體現出來。
?
?????? 在業務類的設計的時候,所有的業務類都顯得比較的"弱",之所以這么說,主要是基于這樣的一個思想:
?????? 都知道,在面向“對象”設計的過程中,每個類就好比一個人,實例化一個類就好比生成了一個人,這個人可以在一出生就具備很多的能力(天生秉異),如異常處理,日志跟蹤,緩存,通用的驗證機制等等;也可以一出生什么都不會(或者只會做最基本的幾件事情)。之前的業務類實例化之后就生成一個非常普通的人。每個類都得重寫很多的基礎代碼,說到通用那就只是copy代碼。如果想要使得新生成的類很強大,具備很多功能,在設計的時候可以讓這些類繼承一個功能比較強大的基類。當然繼承只是實現方式的一種。
?
?????? 現在Richard已經被分到了另外的一個項目組(也是本系列文章要講述的一個項目,就稱為項目進度管理系統—Project Process Management(PPM)),而且擔任了架構的設計和開發(之前的架構設計Richard沒有發言權)。有了前車之鑒,在新項目開發之前的幾個月,Ricahrd首先就開始了通用架構的設計,目的有兩個:
?????? 1.解決之前項目的問題:不靈活,不通用,每次都做重復性的事情等。
?????? 2.結合自己的考慮,開發一個Framework,使得開發更加的快速,靈活,強大。
?
?????? 其實在項目真正開始了之后,不可能給你幾個月的時間去設計架構的。其實在AIM出現問題之后,Richard就已經在構思如果開發一個通用的Framework了(”通用”--不表示就是到處可用,因為公司的一直是開發某一領域軟件的,比如現在的公司就擅長開發企業管理的一些軟件,所以開發出一個基于領域模型的架構和框架還是有可能的)。Richard也想挽救AIM,由于諸多原因,想法終究只是成了想法。
?
?????? 在從AIM項目出來之后,Richard又開始了另外的一個項目的開發,名稱我們暫時就虛擬的稱為EMS(Employee Management System),EMS項目不是很大,公司解決讓Richard一個人開發這個項目。這個項目給了Richard很多的時間來考慮架構設計和Framework設計的時間,因為EMS項目不是很復雜,而且技術和進度都在掌控之中,在正常上班時間就可以到時候定期交付。所以每天下班之后,Richard開始加班去構思Framework的設計,開發的時間越長,技術就應該沉淀的越多,如以通用類庫,組件的方式或者解決問題方案的文檔等出現。只有這樣,下次的開發才更加的快速。
?
?????? 3個月下來,EMS項目完成了。而且Richard設計的Framework也有了雛形。準確的說,還只能稱為 基礎架構基本完成。EMS沒有采用這個Framework來開發,因為Framework的設計和實現于EMS是同步進行的。
?
?????? Richard心里是這樣認為的:設計通用的架構,然后在項目中不斷的錘煉,更新,產生出通用的代碼,然后演化為Framework。只有設計出了自己的Framework,以后的開發才有可能進入"光速開發"。
?
?????? 在這個項目開始之初,Richard就和其他幾個組員討論了如何實現,同時也推出了自己開發的成果。商量之后,決定采用Richard的設計。
?
?????? Richard在設計架構的時候,也參考了現在流行的一個Framework,如Spring.NET ,CSLA.NET, Nhibernate,主要吸收它們的一些思想,同時也分析了這些Framework對自己項目的利弊。而且認為:沒有絕對萬能的技術,一個架構的實現需要在很多的因素之間權衡,技術不是用來show的,而是用來解決問題,這就是技術的價值。
?
?????? 本系列文章就展示整個構思,設計,實現的過程。本系列文章所要開發的項目的價值可能不大,本系列文章的價值在于架構的思考和設計過程,一步步的演化過程。?
謝謝大家:)
下篇文章:.NET 分布式架構開發實戰之二 草稿設計
?
歡迎大家參加企業級項目開發團隊
?
版本規個人和博客園所有,轉載請標明出去和作者。
?
??????
?
?
?
評論: 18 查看評論 發表評論
有道難題2010網易編程挑戰賽
最新新聞:
· Google談搜索:微軟財大氣粗 需時刻提防(2010-05-24 11:51)
· 盛大文學進軍網頁游戲 業內人擔心難逃同質化(2010-05-24 11:49)
· 丁磊開始買紅酒:聯手溫州資本開酒莊(2010-05-24 11:43)
· 微軟Windows、McAfee、Firefox漏洞回顧(2010-05-24 11:33)
· HTML簡史:HTML5將于2012年被接納為候選標準(2010-05-24 11:29)
編輯推薦:為什么硅谷最牛的人都是在創業公司?
網站導航:博客園首頁??個人主頁??新聞??閃存??小組??博問??社區??知識庫
轉載于:https://www.cnblogs.com/tanshuicai/archive/2010/05/23/1742677.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的[原创].NET 分布式架构开发实战之一 故事起源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinSock网络编程实用宝典(一)
- 下一篇: SWT 下菜单与子菜单添加的实现(详细图