Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#3.0中构建桌面应用程序_C#_Wpf_Architecture - Fatal编程技术网

如何在C#3.0中构建桌面应用程序

如何在C#3.0中构建桌面应用程序,c#,wpf,architecture,C#,Wpf,Architecture,我在C#3.0中创建了一个简单的桌面应用程序,以学习一些C#、wpf和.NET3.5。 我的应用程序从csv文件中读取数据,并将其存储在SQLServerCE数据库中。我使用sqlmetal为数据库生成ORM代码。 这个应用程序的第一次迭代非常难看,我正在重构它 这就引出了我的问题。您将如何在C#中构建桌面数据库应用程序? 最佳实践是什么 您是否创建了使用sqlmetal生成的代码的数据库抽象层(DAL)?或者生成的代码足够抽象了吗 如果使用DAL模式,是将其设置为单例还是静态成员? 是否将视图

我在C#3.0中创建了一个简单的桌面应用程序,以学习一些C#、wpf和.NET3.5。 我的应用程序从csv文件中读取数据,并将其存储在SQLServerCE数据库中。我使用sqlmetal为数据库生成ORM代码。 这个应用程序的第一次迭代非常难看,我正在重构它

这就引出了我的问题。您将如何在C#中构建桌面数据库应用程序? 最佳实践是什么

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

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

如果这似乎是一个很长的开放式问题,我深表歉意,但我最近一直在思考这个问题。
我看到很多关于如何在C#中构建企业n层应用程序的示例,但关于构建独立桌面应用程序的示例并不多。

在构建任何应用程序之前,您应该定义应用程序的要求。
这是初学者的一个常见错误——在考虑代码的性能之前就开始编写代码。我的建议是试着描述一下你的应用程序的一些特性。它将帮助您了解应该如何实施它

至于有用的学习资源,我强烈建议您看看这是一个专门为开发人员提供桌面应用程序开发最佳实践的项目。

我将从微软p&p团队的(cough PRISM cough)开始。下载的同时还提供了一个很好的参考应用程序,它是我今天大部分WPF开发的起点

如果你有兴趣从他们那里听到更多的话,你可以采访他们

更好的是,如果你对WinForms时代的驾驶室很熟悉的话,Prism就没有以前的驾驶室那么重了。

答案是“视情况而定”

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

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


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

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

我从杰里米·米勒的系列开始

我是出租车的早期使用者。我从深入研究这项技术和阅读所有关于应用程序体系结构的.NET博客中学到了很多

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

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

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

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

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