3

我很好奇其他商店在基本应用程序框架方面做了什么?我将应用程序框架视为能够提供附加或扩展功能以提高由它构建的应用程序的质量。

有多种开箱即用的框架,例如 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。

只是想知道其他人可能做了什么,以及您的框架解决了哪些问题,您没有找到您满意的工具?至于我们的经验,我们肯定会从新框架中获益,并对我们采取的方法感到满意。

4

2 回答 2

1

我的简单建议是您使用适合您需求的框架。当然,为了做到这一点,你必须事先试验并知道你在寻找什么。即使框架提供的功能远远超出您的需要,这样做的成本是多少?对于一般问题,成本只是一个 jar 中的几个额外 Mbs,我认为这对于大多数项目来说是可以的。

最后,您应该选择一个能够正确完成工作的框架,以便您的重点是提供用户价值并简化开发人员的维护。当然,没有一个单一的框架可以解决每个人的问题,但是有一些框架可以达到他们的目标。这一切都取决于最好的妥协。

于 2008-12-07T14:58:48.877 回答
1

我们的方法是将整个架构师团队(即“技术架构师”)用于:

  • 要么调整现有的开源框架,在某些情况下将它们封装在内部 API 中,以便在需要时能够更改框架
  • 或根据特定需求创建新框架,为多个项目找到多个团队。

无论采用何种方法,这些框架都需要有很好的文档记录(至少具有完整的公共 API),并且需要很好地宣传它们的发布:
由于所有团队都将基于这些框架的工作,他们需要升级他们的框架版本尽快,以便建立自己的交付。

于 2008-12-07T16:57:08.170 回答