簡體   English   中英

您將如何在C#3.0中構建桌面應用程序

[英]How would you architect a desktop application in C# 3.0

我在C#3.0中創建了一個簡單的桌面應用程序來學習一些C#,wpf和.Net 3.5。 我的應用程序基本上從csv文件中讀取數據並將其存儲在SQL Server CE數據庫中。 我使用sqlmetal為數據庫生成ORM代碼。 我對這個應用程序的第一次迭代是丑陋的,我正在重構它。

這讓我想到了我的問題。 您將如何在C#中構建桌面數據庫應用程序? 什么是最佳做法?

您是否創建了使用sqlmetal生成的代碼的數據庫抽象層(DAL)? 或者生成的代碼是否足以構成抽象?

如果使用DAL模式,是將它設為單例還是靜態成員? 您是否將View-Model-ModelView模式與DAL模式一起使用?

如果這看起來像一個長期未解決的問題,請道歉,但我最近一直在考慮這個問題。 我看到很多關於如何在C#中構建企業n層應用程序的示例,但在構建獨立桌面應用程序時卻沒有那么多。

我將從微軟P&P團隊的WPF綜合應用指南咳嗽 PRISM 咳嗽 )開始。 隨着下載提供了一個很棒的參考應用程序,它是我今天大多數WPF開發的起點。

DotNetRocks工作人員剛剛采訪了Glenn BlockBrian Noyes ,如果你有興趣聽取他們的更多信息。

更好的是,Prism並不像CAB那么重,如果你對WinForms時代的那些熟悉的話。

答案是“它取決於”一如既往。

需要考慮的一些事項:您可能希望在某些時候將這個胖客戶端應用程序設置為Web應用程序(例如)。 如果是這樣,您應確保在業務層(及以下)與演示文稿之間保持分離。 最簡單的方法是確保對業務邏輯的所有調用都通過某種接口。 更復雜的方法是實現完整的MVC設置。

您可以考慮的另一件事是使數據訪問層獨立於業務邏輯和用戶界面。 我的意思是,從業務邏輯到DAL的所有調用應該是通用的“獲取我的數據”,而不是“從SQL獲取此數據”,甚至更糟糕的“運行此SQL語句”。 通過這種方式,您可以將DAL替換為訪問不同數據庫,XML文件或甚至像平面文件之類的東西的DAL。

簡而言之,關注點分離。 這使您可以通過添加不同的UI,將所有三個區域划分為自己的層或更改相關技術來增長。

在構建任何內容之前,您應該為應用程序定義需求。
這是初學者開發人員的一個常見錯誤 - 在考慮代碼如何執行之前開始編寫代碼。 我的建議是嘗試描述您的應用程序的一些功能。 它將幫助您了解應如何實施。

至於有用的學習資源,我強烈建議您看看CompositeWPF這是一個專門用於教授開發人員桌面應用程序開發最佳實踐的項目。

我將從Jeremy Miller的Build Your Own Cab系列開始。

我是CAB的早期采用者。 我從挖掘技術和閱讀有關應用程序架構的所有.NET博客中學到了很多東西。

但最近我有機會開始一個新項目,而不是使用CAB,我使用了StructureMap和NHibernate並借用了Jeremy使用的一些模式(特別是他處理事件聚合的方式)。 結果是一個非常簡化的手工框架,它可以完成我需要的一切,我喜歡使用它。

至於你的問題的具體細節:我使用存儲庫進行數據訪問。 我最初編寫了一些ADO.NET代碼並使用了數據讀取器並映射了我的對象。 但那真的很快,所以我抓住了NHibernate並且非常高興。 存儲庫使用NHibernate進行數據訪問,在這個特定的應用程序中,我的數據訪問需求非常簡單。

我有一個利用存儲庫的服務層(通過WCF,雙工通道公開)。 我的應用程序基本上是客戶端 - 服務器實時更新(我知道你的問題只是關於客戶端,但我會使用相同的技術和模式)。 Ø

在客戶端,我使用帶有StructureMap的MVP進行IoC,並使用一些非常簡單的事件聚合策略進行跨類通信。 我為幾乎所有東西編寫接口代碼。 我做的唯一另一件事就是從CAB借用一個靈活的“工作區”來動態顯示視圖。 我編寫了自己的Workspace接口並實現了自己的DeckWorkspace和TableWorkspace以便在我的應用程序中使用(這些都是非常簡單的事情)。

我在這個最近的應用程序中做出的許多決定都是我感覺使用其他框架和工具的經驗和痛苦的結果。 這次我做出了不同的決定。 也許真正理解如何構建應用程序的唯一方法是事先感受到做錯的痛苦。

我會說是的,它可以很容易地構建為更小的應用程序。 開始時有一個學習曲線,但老實說,它幫助我理解WPF比嘗試從頭開始更好。 在使用CompositeWPF啟動項目然后在沒有它的情況下啟動另一個項目之后,我發現自己試圖復制CompositeWPF的功能,因為我錯過了這些功能! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM