应用框架 - 购买,构建还是同化?

时间:2008-12-07 14:06:18

标签: language-agnostic cross-cutting-concerns application-framework

我很好奇其他商店在基础应用程序框架方面做了些什么?我将应用程序框架视为能够提供额外的或扩展的功能,以提高从中构建的应用程序的质量。

有各种开箱即用的框架,例如Spring(或Spring.NET)等。我发现这些问题的最大问题在于它们不是单点菜单。基本上,它们具有太多功能,除非每个功能都是最佳实现,否则您最终可能会使用多个框架的拼凑来完成这些任务 - 导致膨胀和混乱。在我看来,这适用于免费和商业系统。

当然,写作主要是重新发明轮子。但是,我不认为这是没有价值的,因为它提供了最可定制的选项。然而,有些事情太大而无法发展,而且在这种情况下似乎执行不力或根本没有实施,因为他们不愿意承担开发的前期成本。

有很多种开源项目可以解决可能的应用程序框架的各个部分。这些可以被采用或同化(显然取决于许可协议),以帮助构建来自不同来源的综合框架。

我们通过查看整个企业中我们的应用程序中的一些较大问题来处理这种情况,并提出了一系列有效的跨领域问题和反复出现的实施问题。最后,我们提出了部分开源的混合解决方案,部分基于现有的开源选项,并部分定制开发。

我们框架中的一些事例:

  • 异常和事件日志记录提供程序。一种简单,统一的方法,通过该方法,每个应用程序都可以以最少的编码工作以相同的方式记录异常和事件。开箱即用,它可以登录到SQL Server,文本文件,事件查看器等。它还包含可扩展点以记录到其他来源。
  • 变量分配执行。一种泛型类,它使用受JUnit启发的语法,基于对象类型公开扩展方法。例如,要确定myObject是否为null,我们可以做一个简单的Enforce.That(myObject).IsNotNull();或通过执行简单的Enforce确定它是否是特定类型.That(myObject).IsOfType(typeof(Hashtable));执行失败会引发相应的异常,既减少了代码量又提供了实现的一致性。
  • 单元测试助手。一系列基于反射的类,可以自动测试类及其属性。 (灵感来自CodePlex的Automatic Class Tester),但是从头开始编写。有助于简化为传统上难以测试或耗费时间测试的单元测试的创建。

我们也直接采用了其他一些功能。例如,我们将PostSharp用于AOP,moq用于模拟,autofaq用于DI。

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

2 个答案:

答案 0 :(得分:1)

我的简单建议是使用适合您需求的框架。当然,为了做到这一点,你必须事先试验并知道你在寻找什么。即使框架提供的内容远远超过您的需求,但这个成本是多少?对于普通问题,罐子里的成本只有几个额外的Mbs,我认为对于大多数项目来说都是可以的。

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

答案 1 :(得分:1)

我们的方法是将整个建筑师团队(即“Technical Architects”)用于:

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

无论采用何种方法,都需要对这些框架进行详细记录(至少使用完整的public API),并且需要对其发布进行广泛宣传:
由于所有团队都将基于这些框架开展工作,因此他们需要尽快升级他们的框架版本,以便建立自己的交付。