注重:Visual Studio .NET Enterprise Architect 有一項非常不錯的功能,即答應您使用 Microsoft Visio® 通過 UML(統一建模語言)創建用戶方案,然后生成這些方案的基本代碼。在這里,我不打算深入探討這些細節,但是您可以在 MSDN® Academic Alliance 站點找到一篇關于這一主題的好文章 Generating .NET Code Using Visio Enterprise Architect's UML,作者是 Sreedhar Koganti。有了上一節的目標聲明后,下面是 DotNetKB 項目的幾個示例用戶方案。搜索知識庫匿名用戶可以輸入一個或多個要害字并執行搜索,搜索將返回包含這些要害字的問題和/或回答列表。用戶可以將要害字搜索鎖定在僅搜索問題、僅搜索回答或者二者都搜索。返回的列表將顯示問題及其回復數和被其他用戶訪問的次數。單擊鏈接將返回以時間先后逆序排列的回復(純文本)列表。將新問題輸入到知識庫中匿名用戶可以瀏覽用于向數據庫輸入新問題以供授權專家審閱和回復的屏幕。用戶可以輸入問題的標題和內容,并可以選擇在一系列主題中的某個主題下記錄該問題。用戶還可以輸入他們的名字和相關的 URL(電子郵件、Web 地址等)。輸入將被驗證,以確保包含必需的數據并確保所有輸入數據不會受到腳本攻擊等。一旦數據經過驗證并被保存到數據庫中,用戶將看到一個響應屏幕,感謝用戶的支持并將用戶直接連接到主頁。此外,用戶還可以選擇讓該站點“記住”他們的姓名和 URL 以備以后訪問該站點時使用。您已經了解它的工作原理了,對嗎?每一個方案都嘗試細化用戶交互的重要方面。例如,上面列出的兩個方案表明用戶為“anonymous”(匿名用戶),這表示這類用戶不需要登錄或進行其他方式的授權。第二個示例還標識了若干輸入值、驗證步驟和可選操作。當然,這只是兩個示例;完整的系統需要更多的方案。此外,需要非凡注重的是,“用戶”不僅僅可以是人,也可以是您的程序需要與其通信的其他應用程序,甚至還可以是您的應用程序的其他部分。例如,一個方案描述主頁如何列出最近添加到知識庫中的內容,以供任何人查看。此例中的“用戶”將是主頁自身。還有一些方案描述專家如何查找和回復新問題以及治理員如何更新主題列表并治理系統的其他部分。我已為討論這個簡單的應用程序標識了 20 多種方案。您可以在 DotNetKB 中找到當前列表(以及與此項目相關的所有其他資料)。至此我們就有了目標聲明和一些用戶方案。現在,是時候稍憩一下,然后學學一些技術了。我們需要定義應用程序體系結構,這可以幫助我們以“鮮活有效的代碼”實際實現方案。定義應用程序體系結構 有了基本的目的和為解決方案開發的用戶方案列表后,您需要開始籌劃整體的體系結構。主要目標是標識應用程序的邏輯方面和物理方面,即如何將應用程序拆分為各種有用的部分。在本節中還添加了安全性方面的內容。安全是在規劃的“一開始”您就需要考慮的問題,而不是在開發周期中“最后添加”的內容。我們稍后會在本節中具體討論這個問題。
注重:有關可用選項的具體信息,請參閱 Microsoft Security Developer Center。緩沖區溢出這可能是已編譯應用程序中最常見的安全漏洞。由于我們將使用 .NET 運行時,而它是設計用來在內存中安全運行的,因此不太可能發生緩沖區溢出。此外,我們使用 Microsoft Visual Basic® .NET 對解決方案進行編碼,而 Microsoft Visual Basic® .NET 不像 C 或 C++ 那樣輕易受到緩沖區溢出問題的影響。但是,即使我們打算用 C++ 創建組件,我們還可以使用編譯程序的非凡功能,GS 轉換,來保護我們免受大多數緩沖區溢出的攻擊。數據庫攻擊另一種常見的安全漏洞可能會使惡意用戶獲得訪問存儲在數據庫中的原始數據的權限。為了防止黑客獲得數據的控制權,我們僅使用 SQL Server 存儲過程,而不使用“內聯查詢”。這樣可以大大減少試圖在輸入流中插入其他 SQL 命令的攻擊。我們還在程序中多個位置處使用輸入驗證,以確保所有輸入僅包含有效的字符。交叉站點腳本攻擊對 Web 應用程序進行的常見攻擊還有一種,它涉及到用戶在輸入流中添加客戶方腳本,這類攻擊將執行附加的對話并誘騙用戶將個人數據發送到黑客自己的 Web 站點。要解決這個問題,我們使用 ASP.NET 1.1 的一個新功能,過濾出這種惡意代碼的所有輸入,防止將它置入系統中。顯示屏幕上還包含附加代碼,它將自動禁用任何腳本或顯示可能會插入到數據存儲中的標記。至此,我們已獲得了應用程序的邏輯模型和物理模型,以及確保實現方案包含的安全功能清單。擁有了這些以及目標聲明和用戶方案,我們可以開始這次“編碼前”探險的最后一部分了。完成設計文檔
注重:假如留心的話,您可能會注重到我們未提及將專家數據存儲在數據庫中。只是為了使項目更加有趣(同時給我們一個機會使用直接 XML 數據存儲),我們將專家信息存儲在一個 XML 數據文件中。
注重:假如您已嘗試過面向消息的設計,便會了解我們想要使這些消息類系列化,以便在應用程序圖層之間輕松地往返發送。幸運的是,.NET 運行時知道如何進行這項操作,而無需我們做過多的工作。但是,當我們學習創建消息的文章時,我們將具體討論 .NET 運行時如何系列化類,以及我們如何進行操作以使代碼中的過程最優化。在后面實現消息組件和數據訪問組件時,文章中將介紹此方法的細節。設計文檔將包含一個由所有信息及其屬性與數據類型組成的列表。現在,我們只是考慮如何使用此消息方法來封裝圖層間的數據傳輸,如何創建一種與本地方案和遠程方案配合使用的常規數據服務。數據訪問組件
新聞熱點
疑難解答