2008-09-05 91 views
7

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

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

你创建一个数据库抽象层(DAL),它采用了sqlmetal生成的代码?或者是生成的代码足够抽象?

如果使用DAL模式,你让一个单身或静态成员? 您是否在DAL模式中使用View-Model-ModelView模式?

道歉,如果这似乎是一个长期开放式的问题,但我一直在这家最近给予了很多心思。 我看到很多关于如何在C#中构建企业n层应用程序的例子,但在构建独立桌面应用程序时却没有那么多例子。

回答

4

我将开始与微软的是P&&普队的Composite Application Guidance for WPF咳嗽 PRISM 咳嗽)。随着下载来了一个伟大的参考应用程序,这是我今天大部分WPF开发的起点。

DotNetRocks crew刚刚就此采访了Glenn BlockBrian Noyes,如果您有兴趣从他们那里听到更多消息。

更妙的是,棱镜几乎没有重如CAB是,如果你熟悉在所有与从的WinForms天。

1

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

至于有用的学习资源,我会强烈建议你看看CompositeWPF这是专门设计来教开发商桌面应用开发的最佳实践的项目。

2

答案是“一切都依赖”。

需要考虑的几件事: 您可能希望在某些时候将此胖客户端应用程序设置为Web应用程序(例如)。如果是这样,您应该确保在业务层(和下面)和演示文稿之间保持分离。最简单的方法是确保所有对业务逻辑的调用都通过某种类型的接口。更复杂的方法是实现完整的MVC设置。

你可以考虑正在独立于业务逻辑和用户界面的数据访问层的另一件事。我的意思是说,从业务逻辑到DAL的所有调用应该是通用的“让我得到这些数据”,而不是“从SQL获取我的数据”,或者更糟糕的是“运行这条SQL语句”。通过这种方式,您可以将DAL替换为访问不同数据库,XML文件或甚至像平面文件这样的恶意文件。

总之,分离的担忧。这使您可以通过添加不同的用户界面,将所有三个区域分割成各自的层级,或者更改相关技术来增长未来。

0

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

1

我会从杰里米米勒的Build Your Own Cab系列开始。

我是CAB的早期采用者。通过深入了解该技术并阅读所有关于应用程序体系结构的.NET博客,我学到了很多东西。

但最近我有机会开始一个新的项目,而不是使用CAB我去StructureMap & NHibernate和借用一些杰里米使用模式(尤其是他的处理事件汇总方式)。其结果是一个非常简化的手动框架,可以满足我需要的一切,并且我喜欢使用它。

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

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

在客户端,我利用MVP和IoC的StructureMap以及一些非常简单的跨类通信事件聚合策略。我编码接口的一切。我唯一做的另一件事是从CAB借用一个灵活的“工作区”来动态显示视图。我写了自己的Workspace接口,并实现了自己的DeckWorkspace和TableWorkspace以供我的应用程序使用(这些都是非常简单的事情)。

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

相关问题