我很好奇其他商店在基本应用程序框架方面做了什么?我将应用程序框架视为能够提供附加或扩展功能以提高由它构建的应用程序的质量。
有多种开箱即用的框架,例如 Spring(或 Spring.NET)等。我发现这些框架最大的问题是它们不是点菜的。基本上,它们有太多的功能,除非每个功能都是可用的最佳实现,否则您最终可能会使用多个框架的拼凑来完成这些任务 - 导致臃肿和混乱。在我看来,这适用于免费和商业系统。
当然,写作在很大程度上是在重新发明轮子。不过,我不认为它没有优点,因为它提供了最可定制的选项。但是,有些东西太大而无法开发,并且在这种情况下似乎实施得不好或根本没有实施,因为对承诺开发的前期成本犹豫不决。
有各种各样的开源项目也可以解决可能的应用程序框架的各个部分。这些可以被采用或吸收(显然取决于许可协议)以帮助构建来自不同来源的综合框架。
我们通过查看整个企业的应用程序中的一些更大的关注点来处理这种情况,并提出了一个有效的横切关注点和反复出现的实施问题的列表。最后,我们提出了部分开源、部分基于现有开源选项和部分定制开发的混合解决方案。
我们框架中的一些例子:
- 异常和事件日志提供程序。一种简单、统一的方法,每个应用程序都可以通过这种方法以相同的方式记录异常和事件,而代码工作量最少。开箱即用,它可以记录到 SQL Server、文本文件、事件查看器等。它还包含用于记录到其他源的扩展点。
- 变量赋值强制。一个泛型类,它基于对象类型公开扩展方法,使用受 JUnit 启发的语法。例如,要确定 myObject 是否不为空,我们可以做一个简单的 Enforce.That(myObject).IsNotNull(); 或通过执行简单的 Enforce.That(myObject).IsOfType(typeof(Hashtable)); 来确定它是否是特定类型 执行失败会引发适当的异常,既减少了代码量又提供了实现的一致性。
- 单元测试助手。一系列基于反射的类,可以自动测试类及其属性。(受 CodePlex 的Automatic Class Tester启发)但从头开始编写。有助于为传统上难以测试或耗时的事物简化单元测试的创建。
我们还直接采用了其他一些功能。例如,我们将PostSharp用于 AOP,moq用于模拟,autofaq用于 DI。
只是想知道其他人可能做了什么,以及您的框架解决了哪些问题,您没有找到您满意的工具?至于我们的经验,我们肯定会从新框架中获益,并对我们采取的方法感到满意。