我認為任何業務系統的開發,不管b/s還是c/s,核心精力都應該是放在對邏輯和對高效能,安全性的幾H的處理,底層和系統結構應該由架構師考慮好形成統一風格,前端應該由美工來完善,因此我覺得一個節約人力又要把系統做很好,一方面前期把系統結構考慮好,另一方面用codesmith類試的產生整個系統。尤其像CMS後台這種,結構固定,如果還用EXT來做,前端展現也固定,可以快速產生出來,再少量人對細節進行處理,前台或者面向終端使用者的,也基本可以產生基礎結構,並具有基礎功能。之前看到過部落格園有人發了自己的快速CMS產生系統,經過簡單配置就行了,但如果有codesmith,不僅可以很方便的只修改模版,或者自訂其他類,就可以自訂更精確的控制自己想要的產生結果。
突然想到一個“笑話”:
有一個生產香皂的工廠,工廠生產出來的香皂,都裝在一個漂亮的紙盒子裡。
但是工廠的裝香皂的流水線存在一個問題,總是有一些紙盒子,經過流水線以後,香皂沒裝進去,成了空紙盒子。
要把這些紙盒子全部撿出來是一個很傷腦筋的事,廠長增加了很多工人檢查流水線,但是空紙盒還是存在。
這天,廠長去研究所找到一些專家和博士,“你們給我研究出一個裝置,能把空紙盒全部撿出來,我出100萬”
專家和博士立即成立攻關小組,在經曆了半年的艱苦研究,並花費了上千萬的資金,終於製造出一種光電掃描器,香皂盒經光電掃描裝置掃描後,裡面沒有香皂的盒子被掃描出來,並且被機械手撿出。
終於解決了這個問題,廠長舒了一口氣。
話說另外一家生產香皂的小工廠,也存在同樣的空紙盒的問題,另廠長十分惱火。
這天,廠長把幾個農民工召集起來“給我找個辦法把空紙盒撿出來,否則我把你們都開除了”
農民工聚到一起,想啊想,想了足足有一天的時間。。。。
最後。。。。
一個農民工買來一個大功率的風扇。。。
對著流水線上的香皂盒吹,空香皂盒就這樣被吹跑了。
終於解決了這個問題,廠長舒了一口氣。
。。。。。。。。。。我對這個只能說沒有人對也沒有人錯,小工廠確實很小成本解決了問題,節約了錢;大工廠雖然花了很多人力財力,但是有可能會帶來技術革命,帶來其他收益。
同樣軟體開發一樣,有的張的很像的結構和代碼,可以用快速產生器產生,節約了人力成本;有的想了很久,發明了ORM這些等等,各有各的好處,但當系統結構穩定時,我覺得用一個快速產生器也是很不錯的選擇,尤其像codesmith這樣基於模版產生器,擴充性也非常非常好的架構。
該具體說了技術方面的了,前幾天由於項目需要,粗略分析了下codesmith,以前也用的很少,這次要自訂根據oracle資料庫產生一定結構的代碼,遇到些小麻煩,記錄下。
之前對<%@ Assembly Name="SchemaExplorer" %>,<%@ Import Namespace="SchemaExplorer" %>沒有很搞明白,這個雖然不影響其他使用,但一直沒怎麼明白,現在才知道,Assembly 就像引入程式集,可以在運行時用它處理邏輯,就像VS的引用程式集,Import 就像C#裡using命名空間,如果沒有了它,編譯就通不過。
<!-- #include file="a.cs" -->,將在編譯和運行期間自動編譯並載入a.cs類;自訂類來產生自訂代碼時將會常用它,它將即時被編譯,其他地方用改類時自動就有了智能提示。
<% %>講在運行時自動執行
<%@ Register Name="DominService" Template="Domin/Domain.Service.cst" MergeProperties="False" %> ,像這個就像用使用者空間一樣,引入Domain.Service.cst這個模版,對模版可以RenderToFile(..產生出來,SetProperty設定該模版變數
<%@ Property Name="ClassName" Type="String" Category="Context" Description="類名的描述" Default="a.cs"%>,這個添加屬性,cst檔案自動識別在分類為Context下添加一個可以輸入字串的輸入框。
用的最多的<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Optional="True" Category="Data" Description="指定資料表." %>
<%@ Property Name="SourceDatabase" Type="SchemaExplorer.DatabaseSchema" Optional="True" Category="Data" Description="指定資料庫." %>,由codesmith自已的制定資料表和制定資料庫的屬性,根據資料庫快速產生代碼,必不可少的屬性。
當然比較重要的是codesmith自己的SchemaExplorer.dll檔案,位於codesmith安裝目錄下的AddIns檔案夾下面,它包括了產生資料庫用的類和方法。
產生資料庫類型比較重要,oracle和mssql產生後的類型欄位又不一樣,因此導致經常產生好資料庫,不同資料庫檔案類型不一樣,比如某個表的某一列ColumnSchema,mssql資料庫擷取類型是用該對象的DataType屬性,值將有DbType.Double,DbType.Int64,DbType.String等,但oracle不一樣,擷取oracle資料庫的屬性是NativeType屬性,它是一個string類型的結果,將會是比如clob,number,timestamp(6),這樣的,由於oracle資料庫一般用number類型,不用int類型,因此當自訂類轉換為具體類型時,要參考ColumnSchema對象的Precision, Scale, Size來判斷了。其中scale是精確到小數點後的位元,如number(6,2),則scale屬性為2,size是用於計算Nvarchar2這種類型的長度,如nvarchar2(100),則size屬性為100,precision為小數點前精確位元,如number(6,2),則precision屬性為6,但是timestamp這幾個屬性沒有值,它是直接從NativeType裡看的出來時間長度,可能為3,6,9,預設為6,NativeType值將為timestamp(6)。
最近比較忙,沒有很細研究,只是前端時間按用SchemaExplorer.DatabaseSchema自動產生整個oracle資料庫做個一定的研究,過段時間再仔細看下,希望能寫篇更好更細的文章記載。