《.Net軟體設計新思維》是2009年電子工業出版社出版的圖書,作者是陳俊先、高陽。
基本介紹
- 書名:.Net軟體設計新思維
- 作者:陳俊先,高陽著
- ISBN:9787121093784
- 頁數:428
- 定價:69.00元
- 出版社:電子工業出版社
- 出版時間:2009-9-1
- 開本:16
內容簡介,目錄,前言,
內容簡介
讀者通過學習這種新思維開發模式,可以快速適應資料庫結構變化、業務邏輯變化及程式界面變化,而且使用本書所提供的可視圖形化設計器,無須編碼就可以改變資料庫結構、用戶界面,以及自動生成程式原始碼和DLL。也可以掌握如何將一個XML組件任意插到現有的程式中,開發程式的過程就像搭積木一樣用一塊塊積木構建出整個系統。通過本書的學習,讀者可以輕鬆掌握這種原理和開發技巧,從而開發出各個行業的商務企業管理軟體。
本書既可作為大專院校相關專業師生的教學參考書,也可供計算機及其相關領域的工程技術人員查閱和開發畢業論文參考之用。對於.NET程式設計師和普通計算機愛好者,本書也不失為幫助他們開拓思維和開發套用商務企業管理軟體的一本深入淺出的計算機讀物。
該書從。NET企業商務管理軟體新思維設計角度出發,以C#程式語言為基礎,採用XML組件即插即用的方式來開發管理軟體。XML在這套方法中起到靈魂作用,它就好像一種膠,把所有的DLL粘到一起,真正運行的還是DLL。該書包括兩部分,第一部分是“商務新星。NET2008”(Business4.0)商務套用開發平台部分(管理軟體開發平台),可進行“即插即用”傻瓜式的企業管理軟體的開發;第二部分是底層平台部分(XmlDesigner2008設計器),商務新星。NET2008套用開發平台部分是完全基於底層平台的支持,來實現即插即用快速開發MIS套用等業務功能的。
目錄
第一部分
第1章 體驗軟體開發新思維 2
1.1 從一個實例開始 3
1.2 資料庫表結構設計 4
1.3 採用傳統軟體開發模式構建 8
1.3.1 構建數據源 8
1.3.2 構建程式界面 11
1.3.3 修改綁定源 14
1.3.4 修改SQL語句和數據集 15
1.3.5 編寫程式 16
1.3.6 體驗開發成果 20
1.4 採用軟體開發新模式構建 20
1.4.1 構建數據集 21
1.4.2 體驗XML組件即插即用 24
1.4.3 建立SQL的綁定 28
1.4.4 建立數據的綁定 29
1.4.5 事件掛接處理 32
1.4.6 體驗新模式成果 34
1.5 軟體開發新模式的優勢 34
1.6 小結 35
第2章 XML組件即插即用的機理 36
2.1 概述 37
2.2 .NET組件 39
2.2.1 什麼是組件 39
2.2.2 屬性 40
2.2.3 事件 43
2.2.4 數據綁定 46
2.3 XML組件即插即用 48
2.3.1 什麼是XML組件 48
2.3.2 組件屬性的XML表示 49
2.3.3 組件事件的XML表示 54
2.3.4 如何實現即插即用 54
2.4 組件標籤定義檔案 56
2.5 表達式文法 62
2.6 屬性處理機制 63
2.6.1 屬性基本值 64
2.6.2 屬性默認值 64
2.6.3 動態屬性值 64
2.7 事件處理機制 66
2.7.1 簽名事件處理 66
2.7.2 非簽名事件處理 67
2.8 數據模型 68
2.8.1 數據集和數據存取定義 68
2.8.2 數據綁定模型和XML表示 70
2.9 數據模型 74
2.9.1 數據存取機制 75
2.9.2 解析表達式和Where綁定 80
2.10 載入Form.dll 83
2.11 小結 84
第3章 構建 .NET窗體設計器最佳實踐 85
3.1 .NET設計時概述 86
3.1.1 服務和容器 87
3.1.2 設計器宿主 89
3.1.3 設計器圖面 89
3.1.4 設計器載入器 90
3.2 構建設計器圖面 91
3.3 設計器宿主編程 96
3.4 設計器載入器設計 96
3.4.1 讀取XML檔案 100
3.4.2 寫XML檔案 107
3.5 設計時服務設計最佳實踐 113
3.5.1 選擇服務處理 113
3.5.2 組件改變服務處理 114
3.5.3 命名創建服務處理 114
3.5.4 選單命令服務處理 118
3.5.5 工具箱服務處理 122
3.5.6 事件綁定服務處理 124
3.5.7 屬性視窗服務處理 126
3.6 Undo引擎控制最佳實踐 128
3.7 設計器複製/貼上編程實踐 130
3.8 設計器快捷鍵設計 133
3.9 原始碼生成最佳實踐 136
3.9.1 代碼對象模型 136
3.9.2 數據集原始碼生成 143
3.9.3 數據表和數據列原始碼生成 152
3.9.4 SQL原始碼生成 153
3.9.5 屬性默認值和動態屬性值的代碼生成 154
3.9.6 快捷鍵原始碼生成 155
3.9.7 事件原始碼生成 157
3.9.8 數據綁定原始碼生成 158
3.10 編譯原始碼最佳實踐 159
3.11 小結 161
第4章 列印報表設計器基礎 162
4.1 概述 163
4.2 列印設計元素 164
4.2.1 標籤元素 164
4.2.2 檢查框元素 169
4.2.3 線段元素 172
4.2.4 矩形元素 173
4.2.5 圖形元素 175
4.2.6 網路元素 177
4.3 數據綁定 179
4.3.1 標籤元素和檢查框元素的數據綁定 182
4.3.2 格線元素的數據綁定 182
4.4 設計元素記憶體結構 182
4.4.1 列印標籤描述檔案 182
4.4.2 列印設計元素標籤結構 185
4.5 小結 190
第5章 列印報表設計器最佳實踐 191
5.1 圖形系統概述 192
5.2 系統初始化 194
5.3 讀/寫XML 200
5.3.1 基本屬性格式 201
5.3.2 圖形格式 202
5.3.3 數據綁定格式 202
5.4 屬性 204
5.4.1 屬性默認值 204
5.4.2 動態屬性 205
5.5 列印方式 205
5.5.1 分頁列印 206
5.5.2 卡片式列印 207
5.5.3 客戶自定義列印 210
5.6 列印標記類 211
5.7 轉換標籤並輸出到印表機 214
5.7.1 標籤元素的轉換 216
5.7.2 檢查框元素的轉換 219
5.7.3 線段元素的轉換 221
5.7.4 矩形元素的轉換 222
5.7.5 圖形元素的轉換 223
5.7.6 網路元素的轉換 223
5.8 頁面設定 224
5.9 列印設定 225
5.10 列印方法調用 227
5.11 小結 229
第二部分
第6章 新思維之商務管理系統體系結構 231
6.1 商務管理系統的設計目標 232
6.2 商務管理系統的組成 233
6.3 客戶端應用程式的基本概念 233
6.4 商務管理系統架構 235
6.5 服務程式 237
6.6 伺服器程式 240
6.6.1 伺服器程式啟動流程 240
6.6.2 伺服器配置 242
6.7 客戶端程式 242
6.7.1 客戶端程式啟動流程 243
6.7.2 心跳信號 244
6.7.3 客戶端配置 245
6.7.4 程式模組 246
6.8 小結 248
第7章 像搭積木一樣搭建軟體最佳實踐 249
7.1 商務管理系統主界面 250
7.2 構建檔案 251
7.2.1 建立數據集 251
7.2.2 設計檔案窗體 252
7.2.3 運行客戶檔案 259
7.2.4 設計檔案列印報表 259
7.3 構建查詢 261
7.3.1 建立數據集 261
7.3.2 設計查詢 263
7.3.3 設計查詢列印報表 267
7.4 小結 269
第8章 新思維下的數據存取 270
8.1 數據存取機制概述 271
8.2 數據存取代理 271
8.3 DataAccess類 272
8.4 User類 275
8.5 小結 275
第9章 數據轉換與生成最佳實踐 276
9.1 概述 277
9.2 轉換與生成源和目的 277
9.3 轉換控制 281
9.4 小結 282
第10章 遠程數據交換最佳實踐 283
10.1 遠程數據交換原理 284
10.2 數據導出實踐 285
10.3 數據導入實踐 287
10.4 小結 296
第11章 數據備份與恢復 297
11.1 數據的備份與恢復概述 298
11.1.1 連線 299
11.1.2 默認的Windows認證連線 301
11.1.3 SQL Server登錄 301
11.1.4 仿冒其他Windows身份 302
11.1.5 作業和日程 302
11.2 數據備份 303
11.2.1 手工完全備份 305
11.2.2 自動完全備份 306
11.3 數據恢復 308
11.4 小結 310
第12章 業務邏輯設計最佳實踐 311
12.1 進貨業務邏輯設計 312
12.2 付款業務邏輯設計 314
12.3 出貨業務邏輯設計 315
12.4 收款業務邏輯設計 318
12.5 小結 319
第13章 自擴展商務管理系統 320
13.1 在原有業務基礎上擴展 321
13.1.1 改變資料庫結構 321
13.1.2 調整數據集結構 322
13.1.3 調整界面與列印格式 322
13.2 增加新業務 324
13.3 小結 324
第14章 Web客戶端程式設計基礎 325
14.1 Web客戶端程式基礎 326
14.2 WebForm的基類XmlPage 327
14.3 Web客戶端程式數據模型 329
14.3.1 數據集及數據存取定義 329
14.3.2 WebForm的數據綁定 330
14.3.3 數據更新機制 336
14.4 Web客戶端程式數據模型 337
14.5 虛擬目錄與配置 337
14.6 小結 339
第15章 構建Web頁最佳實踐 340
15.1 實現一個編輯型的Web頁基類 341
15.2 創建Web項目 341
15.3 定義數據集 343
15.4 創建Web頁 343
15.5 建立數據綁定 346
15.6 建立事件綁定與數據更新 347
15.7 建立SQL綁定 349
15.8 Web用戶及註冊 350
15.9 查看運行結果 352
15.10 小結 356
第三部分
附錄A 組件描述語言(Component Markup Language,CML) 358
A.1 根標籤 359
A.2 屬性 359
A.2.1 顏色屬性值表示法 360
A.2.2 位置屬性值表示法 360
A.2.3 尺寸屬性值表示法 360
A.2.4 枚舉屬性值表示法 361
A.2.5 列表框(ListBox)和下拉列表框(ComboBox)Items屬性值表示法 361
A.2.6 PictureBox的Image屬性值表示法 361
A.2.7 事例對象屬性值表示法 361
A.3 數據綁定 362
A.3.1 簡單控制項數據綁定 363
A.3.2 ComboBox、ListBox數據綁定 363
A.3.3 複雜控制項數據綁定 364
A.4 表達式文法 366
A.5 屬性默認值($)和動態屬性(=) 368
A.5.1 屬性默認值($) 368
A.5.2 動態屬性(=) 368
A.6 事件 369
A.6.1 簽名事件方法 369
A.6.2 非簽名事件方法 370
A.7 存取組件對象及屬性 371
A.7.1 讀取組件屬性 371
A.7.2 設定組件屬性 371
A.8 掛接自定義方法 372
A.9 系統對象 372
A.9.1 Me 372
A.9.2 Me.屬性名 373
A.9.3 !組件名 373
A.9.4 !組件名.屬性 374
A.9.5 Parent 374
A.9.6 Parent.屬性名 374
A.9.7 Parent!組件名 374
A.9.8 Parent!組件名.屬性名 374
A.9.9 Forms["SheetName"] 374
A.9.10 Forms["SheetName"]!組件名 375
A.9.11 Forms["SheetName"].屬性名 375
A.9.12 Forms["SheetName"]!組件名.屬性名 375
A.9.13 DataSet(數據集) 375
A.9.14 Count(主表記錄數) 377
A.9.15 Cols["ColumnName"](主表列) 377
A.9.16 Parent.DataSet(父Form數據集) 377
A.9.17 Parent.Count(父Form主表記錄數) 378
A.9.18 Parent.Cols["ColumnName"](父Form主表列) 378
A.9.19 Forms["SheetName"].DataSet 378
A.9.20 Forms["SheetName"].Count 378
A.9.21 Forms["SheetName"].Cols["ColumnName"] 378
A.9.22 [列號] 378
A.9.23 [列號].屬性名 379
A.9.24 [列號]!控制項ID 379
A.9.25 [列號]!控制項ID .屬性名 379
A.10 數據表(DataTable) 379
A.10.1 Name屬性 380
A.10.2 IsMainTable屬性 382
A.10.3 SQL屬性和Where綁定表達式 383
A.10.4 Load 屬性 384
A.10.5 Local 屬性 384
A.10.6 From 屬性 385
A.10.7 SQLDebug 屬性 385
A.11 數據列(DataColumn) 385
A.11.1 ColumnName屬性 386
A.11.2 Caption 屬性 386
A.11.3 DefaultValue 屬性 387
A.11.4 Expression 屬性 388
A.11.5 Update屬性 388
A.12 數據視(DataView) 389
A.13 快捷鍵 390
附錄B 基類XmlForm的屬性和方法 395
B.1 屬性 396
B.1.1 public Junxian.AbstractDataAccess.DataAccess DA { get; set } 396
B.1.2 public DataSet DataSet { get; set } 396
B.1.3 public string MainTableName { get; set } 396
B.1.4 public Junxian.XmlForm.XmForm ParentSheet { get; set } 396
B.1.5 public string CurrentTable { get; set } 396
B.1.6 public string Shortcut { get; set } 396
B.2 方法 397
B.2.1 public virtual void Save(bool bQuestion) 397
B.2.2 public bool SaveDataToXml(string FileName) 397
B.2.3 public void Requery(string TableName) 397
B.2.4 public void RequeryTable(string TableName, bool IsClear) 398
B.2.5 public void RefreshDataView(string TableName) 398
B.2.6 public void GetDataView(string TableName) 399
B.2.7 public void Position_Changed(object sender, System.EventAgrs e) 399
B.2.8 public void PositionChanged() 399
附錄C 《俊先管理軟體開發平台》的檔案 401
附錄D 《商務新星.NET》對資料庫表結構的限制 402
附錄E Web頁面基類XmlPage的屬性和方法 403
E.1 屬性 403
E.1.1 public DataSet DataSet { get; set } 403
E.1.2 public XmlPage ParentPage { get; set } 403
E.1.3 public string MainTableName { get; set } 403
E.1.4 public string PageName { get; set } 404
E.1.5 public Junxian.AbstractDataAccess.DataAccess DA { get; set } 404
E.2 方法 404
E.2.1 public object Parse(string strExpression) 404
E.2.2 public object Binding(string TableName, string ColumnName) 404
E.2.3 public void SaveData() 405
E.2.4 public void UpdateData(string TableName) 405
E.2.5 public void DeleteTableRecord(string TableName, object KeyValue) 405
E.2.6 public void RequeryTable(string TableName, bool IsClear) 405
E.2.7 public virtual void Requery(string TableName) 405
E.2.8 public void RefreshDataView(string TableName) 406
E.2.9 public void GotoPage(string PageName) 406
E.2.10 public void AddChildItem(string ChildTableName) 406
主要參考文獻 407
前言
一個真實的故事
1996年10月,一套經歷了2年多時間開發出來的商務管理軟體終於問世了,它帶給我們無限的喜悅。2年多辛苦努力,800多個不眠之夜,終於換來了令人欣慰的成果!客戶開始接受這套系統,銷量也開始增多,從1個、2個、10個,…,100個……
1999年,經過3年的努力,我們的商務管理系統在市場上銷量大增。可是這並沒有給我們開發人員帶來喜悅,正相反,帶來的卻是沉重的負擔。面對這么多的客戶,有一個問題很突出地擺在面前:
每個客戶都會有些特殊的需求,這些需求不改動系統是無法滿足的;如果改動系統,由誰來做?
怎么做?
版本怎樣維護?
要多少個版本才能夠用?
一個版本升級了,是否其他版本也要升級?
一個一個問題擺在開發人員的面前。開發人員從最初1個人、2個人,20個人……這樣發展下去要多少人能滿足需要呢?
隨著人員的增加,開發成本急劇上升,但沒有跡象表明這種狀況什麼時候會停下來。客戶多不是好事卻成了負擔!這是開始沒有想到的。
對於這些問題,每一個開發人員都非常清楚,但誰也沒有辦法解決。針對這些問題,我們召開了全體開發人員大會,筆者提出了開發管理軟體開發平台的想法。所謂的平台就是從眾多的需求中抽象出不變的東西,在這個平台的基礎上再分別開發特定需求的套用。想法卻遭到了全體開發人員的反對。他們認為:想法是好的,卻實現不了。也難怪,那時所用的開發工具還只是VB!
對於不同行業的套用可以用同一套程式嗎
有經驗的開發人員都知道,對於不同行業由於需求差別巨大,不可能使用同一套程式。即使同一行業,不同企業的需求也是有差別的,這是目前在國內開發企業管理軟體套用所面臨的局面。很難想像一家服裝企業與一家醫藥企業對管理軟體的要求是一樣的。退一步說,即使要求相同,那么底層資料庫結構也是不同的。比如,醫藥企業可能要求有批號、生產日期等,而服裝企業則要求有尺碼、顏色等,這顯然是不同的。那您能把資料庫表的結構設計成既包含批號、生產日期又有尺碼、顏色等欄位嗎?顯然是不能的,這違反了資料庫冗餘約束不說,更重要的是對於不同行業需要設計多少個欄位?而這些欄位又是什麼類型?對於一個未知的需求,你無法設計。
開發不同行業的管理軟體,從資料庫底層到界面表示層都是不同的,都要發生變化,這些變化要求開發人員自底向上各個層面都要改動程式。因此,開發出同一套程式適用不同行業的需求是開發人員的夢想。那么能不能開發出一套程式適用於不同企業或行業呢?如果能又將怎樣才能做到呢?
積木的啟示
2001年,3歲的兒子在玩積木,他把積木拆了搭,搭了拆,擺出各式各樣的形狀圖案,有木馬、橋、汽車、高樓、城堡……看著不斷變化的形狀,筆者心裡在想,軟體開發是否也能像搭積木一樣任意搭建自己想要的系統呢?如果能那樣該多好啊!這種想法已經有三年了,但有好的想法,卻很難實現,正像同事們反對的那樣:“想法很好!實現不了!”
2001年,筆者看到了Microsoft Visual Studio2002測試版,就開始試用,這不就是要找的開發工具嗎!用它可以實現那個平台了!可是又怎樣才能像搭積木那樣搭建軟體系統呢?軟體系統的積木又是什麼呢?一個偶然的機會在報紙上看到了介紹XML。XML是什麼?XML能做什麼?帶著這種疑問開始了XML探尋。經過研究探索,發現XML正是要找的軟體系統的積木!
成果
有了XML這種積木,藉助於.NET和XML技術,就可以實現程式的即插即用了。經過幾年的努力,筆者成功地開發出了基於XML組件的即插即用的《俊先管理軟體開發平台》。用這套平台可以快速開發出自己想要的管理系統,並且也能隨著用戶需求的變化而快速修改系統,並不會對系統造成影響。
本書也是這一平台的衍生物,它詳細地介紹了這種快速開發新模式,以讓更多人受益。
本書的主要內容
本書共包括15章,每章的主要內容如下:
第1章“體驗軟體開發新思維”,讓你感受一下“軟體開發新思維”下的軟體開發過程。通過引入銷售訂單的例子,介紹了怎樣建立數據集檔案(xsd)、界面檔案(xml),體驗XML組件的即插即用功能。
第2章“XML組件即插即用的機理”,介紹了XML組件的概念,以及.NET組件的屬性和事件的XML表示及處理機制。同時,闡述了數據綁定和本書的數據存取機理。也介紹了本書最重要的一個類XmlForm和本書的特色:“解析表達式和Where綁定”。
第3章“構建.NET窗體設計器最佳實踐”,介紹了.NET Framework 2.0 的 Form設計器原理、XML檔案的讀/寫,以及原始碼生成和編譯源碼為DLL檔案等。
第4章“列印報表設計器基礎”是列印報表設計器的基礎知識準備,介紹了列印報表設計元素、設計元素的屬性替代對象、數據綁定,以及這些設計元素的記憶體結構表示。另外,也介紹了列印報表與界面的關係。
第5章“列印報表設計器最佳實踐”,介紹了列印報表設計器的實現過程,以及列印設計元素的列印輸出轉換、分頁列印、客戶自定義列印、卡片式列印。
第6章“新思維之商務管理系統體系結構”,介紹了在軟體設計新思維下,一個管理軟體《商務新星.NET》的架構,也介紹了《商務新星.NET》的服務程式、配置檔案等。
第7章“像搭積木一樣搭建軟體最佳實踐”,比較完整地介紹了採用軟體開發新模式開發管理軟體的全過程,包括構建檔案、單據、查詢等。
第8章“新思維下的數據存取”,介紹了一種通用的與資料庫無關(SQL Server 或Oracle)、與業務邏輯無關的數據(資料庫訪問)存取方式。
第9章“數據轉換與生成最佳實踐”,介紹了一張單據或查詢生成另一種單據的過程,例如,由銷售訂單生成出貨單等。
第10章“遠程數據交換最佳實踐”,介紹了主要解決連鎖企業各分公司或部門(比如藥店)與總部之間遠程數據交換問題。由於每個部分都存在獨立的資料庫和管理系統,因此需要通過導入導出數據的方式來交換數據。本書中導入導出的檔案採用XML數據格式。
第11章“數據備份與恢復”,介紹了採用SQL Server Management Objects(SMO)實現資料庫備份與恢復原理,也介紹了一些相關SMO對象。
第12章“業務邏輯設計最佳實踐”,介紹了《商務新星.NET》的一些主要的業務邏輯(存儲過程)的實現,有進貨業務、銷售業務、收款業務、付款業務等。
第13章“自擴展商務管理系統”,介紹了對於已經開發完成的管理系統,如何在需求發生變化時擴展或修改原系統,以滿足用戶的要求。
第14章“Web客戶端程式設計基礎”,主要介紹了Web客戶端程式基類XmlPage類、WebForm的數據綁定、數據更新機制、WebForm的事件處理機制等。
第15章“構建Web頁最佳實踐”,介紹了採用軟體設計新思維方式構建一個WebForm頁。
如何閱讀本書
在閱讀此書前,讀者應當熟悉.NET編程和XML技術。
全書分兩大部分。
第一部分(第1~5章)是基礎部分,但並不是說非要閱讀不可(除第2章外)。對於一些對如何實現Form設計器感興趣的讀者可以深入學習第一部分。但對於第2章“XML組件即插即用的機理”,不管你是否想了解Form設計器都應該仔細閱讀,因為這章是後面的基礎。
第二部分(第6~15章)是《商務新星.NET》管理軟體的部分,如果你是為客戶開發管理軟體的讀者或是做畢業設計的本科生或碩士研究生,你都要認真閱讀這部分。
致讀者
經過幾個月的努力,今天終於完成了《.NET軟體設計新思維——像搭積木一樣搭建軟體》的全部書稿,在此先要感謝支持和鼓勵我的朋友!
網上很多朋友對《商務新星.NET》非常關注,多次問什麼時間能發布《商務新星.NET》新版本?《商務新星.NET》3.0版還是於2005年在網上發布的,幾年來由於種種原因一直沒有升級。《商務新星.NET》3.0版是用Microsoft VisualStudio2003開發的,它適應.NET Framework 1.1,而目前Microsoft VisualStudio2008已經發布很長時間了,所以《商務新星.NET》3.0迫切需要進行升級。最新版《商務新星.NET》4.0是使用MicrosoftVisual Studio 2008開發的,它是基於.NETFramework2.0的。《商務新星.NET》4.0是對3.0的全面升級,並且有重大改進(把XML編譯為DLL)。
為了感謝關心和支持《商務新星.NET》的朋友,在本書出版的同時,本人貢獻了《商務新星.NET》(Business 4.0)和《俊先管理軟體開發平台》(XmlDesigner2008)的全部源碼。全部源碼超過30萬行(C#),可供感興趣的朋友學習之用。