有关设计.Net框架应用程序的提示

时间:2010-12-02 14:46:44

标签: c# wpf silverlight

在构建,设计和实现.net框架应用程序时,请您提供一些提示/指南,并满足以下要求:

  1. 它将是一个分析工具,它将从文件,sql数据库中检索数据,并且可能是多维数据集。所以数据层应该能够处理它。中间件应该完全独立于其他层,因此可能需要一个IoC容器(你会推荐哪一个)
  2. 它将部署在本地Intranet上
  3. 未来的前层可能是WPF应用程序或Silverlight(现在,我专注于Silverlight但重点是它会改变)
  4. 将来很容易定制和改进它,而不会改变太多代码,因为框架将部署到许多客户端
  5. 我需要一种方法来存储配置信息,应用程序将在应用程序加载事件中选择它以设置其感觉和外观。
  6. 我有两个月的时间来实施它并寻找尽可能多的提示。

4 个答案:

答案 0 :(得分:5)

SoC开始

将您的应用程序分解为几个使用IoC(接口+实现)的程序集:

  • 应用程序模型程序集 - 所有其他程序集都将引用此程序集,因为这些类将用于内部通信 - 它们通常只是POCO
  • 演示程序集 - 引用应用程序模型和业务服务 - 无论是WPF还是Silverlight,都可以使用MVVM来让您的测试生活更轻松
  • 业务服务程序集 - 引用应用程序模型和数据存储库程序集
  • 数据存储库 - 这些存储库定义实际从存储中获取数据的存储库

然后我再创建三个:

  • 文件数据提供者
  • 数据库提供商
  • 多维数据集提供商

数据存储库将引用所有三个并使用它们来提供必要的数据。

如果配置变得非常复杂并且具有很多功能,那么您应该将它放在一个单独的程序集中,并通过业务服务程序集引用它。

使用哪个MVVM库

既然你提到了时间,我想你很难抓住你的截止日期。当使用MVVM(我建议使用)时,我也建议你不要使用完整的PRISM(来自P& P的a.k.a.复合应用指南),而是使用MVVM Light Toolkit。你需要更少的时间来加入这个行列。

代码生成

在适当的地方,我建议你充分发挥T4的潜力。我用它来导入存储过程调用,以避免在调用存储过程(和使用它们的参数)时使用魔术字符串。也请查看my blog post

DAL技术/库

请勿使用SqlConnection / SqlConnection功能等内容编写自己的数据访问代码。今天有许多数据访问层库/技术可以使用,而不是重新发明轮子。如果你知道nHibernate,那就用它吧。如果你知道EF,那就用它吧。如果您知道其他任何事情,请使用它。任何能够为您提供/生成尽可能多的代码的东西,已经过测试和调试。

所以这一切归结为:

DRY + YAGNI

a.k.a。 不要重复你不需要它 =不要过度设计你的代码。

敏捷开发者应该是懒惰的

他们应该根据需要开发,而不是更多! TDD隐含地通过red =>提供此过程。绿色=>重构步骤。

答案 1 :(得分:2)

我建议使用MVVM和测试驱动开发。 MVVM将为您提供前端和中间件之间的良好分离,TDD将有助于控制任何重要的应用程序开发带来的混乱。

答案 2 :(得分:2)

查看Microsoft的模式和实践小组中的Composite Application Guidance,它可能与您正在做的完全不符,但会给您一些好主意。

答案 3 :(得分:1)

从架构的角度来看,我强烈建议您查看Microsoft Application Architecture Guide。由于您已经在使用Microsoft技术堆栈,因此我会考虑将Microsoft Unity用于IoC。您表示您的表示层可能使用WPF或Silverlight,因此请查看使用Windows Communication Foundation,因为在涉及与数据层的通信时,您将在Silverlight中受到一定限制。