我用 C# 3.0 创建了一个简单的桌面应用程序来学习一些 C#、wpf 和 .Net 3.5。我的应用程序本质上是从 csv 文件读取数据并将其存储在 SQL Server CE 数据库中。我使用 sqlmetal 生成数据库的 ORM 代码。我对这个应用程序的第一次迭代非常丑陋,我正在重构它。

这让我想到了我的问题。您将如何使用 C# 构建桌面数据库应用程序?最佳实践是什么?

您是否创建使用 sqlmetal 生成的代码的数据库抽象层 (DAL)?或者生成的代码是否足够抽象?

如果使用 DAL 模式,是否将其设为单例或静态成员?您是否将视图-模型-模型视图模式与 DAL 模式一起使用?

如果这看起来是一个很长的开放式问题,我很抱歉,但我最近对此进行了很多思考。我看到很多关于如何用 C# 构建企业 n 层应用程序的示例,但关于构建独立桌面应用程序的示例却很少。

有帮助吗?

解决方案

我将从 WPF 复合应用程序指南 (咳嗽 棱镜 咳嗽)来自 Microsoft 的 P&P 团队。下载后附带了一个很棒的参考应用程序,它是我今天大部分 WPF 开发的起点。

DotNetRocks 团队 刚刚接受采访 格伦·布洛克布赖恩·诺伊斯 如果您有兴趣从他们那里听到更多信息,请了解这一点。

更好的是,如果您在 WinForms 时代就熟悉的话,Prism 并不像 CAB 那么重。

其他提示

答案一如既往地是“视情况而定”。

有几点需要考虑:您可能希望在某个时候将这个胖客户端应用程序变成一个网络应用程序(例如)。如果是这样,您应该确保业务层(及以下)和表示层之间保持分离。最简单的方法是确保对业务逻辑的所有调用都通过某种接口。更复杂的方法是实现完整的 MVC 设置。

您可以考虑的另一件事是使数据访问层独立于业务逻辑和用户界面。我的意思是,从业务逻辑到 DAL 的所有调用都应该是通用的“获取此数据”,而不是“从 SQL 获取此数据”或更糟糕的“运行此 SQL 语句”。通过这种方式,您可以将 DAL 替换为可访问不同数据库、XML 文件甚至平面文件等令人讨厌的东西的 DAL。

简而言之,关注点分离。这允许您在未来通过添加不同的 UI、将所有三个区域划分为各自的层或更改相关技术来实现增长。

在构建任何内容之前,您应该定义应用程序的要求。
这是初学者开发人员的一个常见错误 - 在考虑代码如何执行之前就开始编写代码。我的建议是尝试描述您的应用程序的某些功能。它将帮助您感受应该如何实施。

至于有用的学习资源,我强烈建议您看一下 复合WPF 这是一个专门为向开发人员传授桌面应用程序开发最佳实践而设计的项目。

我将从杰里米·米勒的开始 打造您自己的驾驶室 系列。

我是 CAB 的早期采用者。通过深入研究该技术和阅读所有有关应用程序架构的 .NET 博客,我学到了很多东西。

但最近我有机会开始一个新项目,我没有使用 CAB,而是使用 StructureMap 和 NHibernate,并借用了 Jeremy 使用的一些模式(特别是他处理事件聚合的方式)。结果是一个非常简化的手动工具框架,它可以完成我需要的一切,并且我喜欢使用它。

至于你的问题的具体情况:我使用存储库进行数据访问。我最初编写了一些 ADO.NET 代码并使用数据读取器并映射了我的对象。但它很快就过时了,所以我抓住了 NHibernate 并且非常高兴。存储库使用 NHibernate 进行数据访问,在这个特定的应用程序中我的数据访问需求非常简单。

我有一个利用存储库的服务层(通过 WCF、双工通道公开)。我的应用程序基本上是实时更新的客户端-服务器(我知道您的问题只是关于客户端,但我会使用相同的技术和模式)。氧

在客户端,我利用 MVP 和 StructureMap 进行 IoC,并使用一些非常简单的事件聚合策略来进行跨类通信。我为几乎所有事情编写接口。我做的唯一一件事是从 CAB 借用了用于动态显示视图的灵活“工作区”的想法。不过,我编写了自己的 Workspace 界面,并实现了自己的 DeckWorkspace 和 TableWorkspace 以在我的应用程序中使用(这些编写起来非常简单)。

我在这个最新应用程序中的许多决定都是我在使用其他框架和工具时感受到的经验和痛苦的结果。这次我做出了不同的决定。也许真正理解如何构建应用程序的唯一方法是事先感受做错事的痛苦。

我想说是的,它可以很容易地针对较小的应用程序进行构建。入门有一个学习曲线,但说实话,它比尝试从头开始更能帮助我理解 WPF。在使用 CompositeWPF 启动一个项目,然后启动另一个没有它的项目后,我发现自己试图自己复制 CompositeWPF 的功能,因为我错过了这些功能!:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top