一些与框架依赖相关的问题

时间:2010-12-09 20:32:33

标签: spring architecture frameworks puremvc

我有一些与框架依赖相关的问题。通常,最好的编码实践表明,不要使用特定于框架的代码来混淆命名空间。对于例如在spring的情况下,所有依赖项都应该保存在配置文件中,并且应用程序代码中没有特定于spring的代码(这是更喜欢spring config xml文件而不是spring注释的原因之一)。在puremvc的情况下,它总是优于不在mxml中混合puremvc代码,因此您的视图可以适用于任何框架。但我的问题是

  1. 如果我们删除spring或puremvc 来自您的代码而不替换任何 其他框架然后你最终 少数豆类(如果是春天)或 一些真正可重复使用的观点(以防万一 of puremvc)。但是粘上豆子或者 视图需要大量编码 努力,根据我的间接 没有框架的依赖性 使用框架特定的api。

  2. 如果我们用其他DI替换弹簧 像pico容器那样的框架 它也需要大量的资金 或返工。这再次导致 间接依赖框架。

  3. 那么,为什么用框架特定的API来混淆你的应用程序命名空间呢?我们可以编写特定于框架的api代码(如果它真的可以大大减轻我们的编码工作量)。

    据我所知,只是不将应用程序命名空间与特定于框架的api混合,不会使您的应用程序可移植到其他框架。想想你是否想要使用spring mvc移动你现有的精心设计的struts应用程序以及它需要多少努力。

    期待其他读者的观点。

2 个答案:

答案 0 :(得分:2)

我认为它是软件设计的基本原则,可以将您的疑虑分开。正如您不想在MVC中的模型层中查看代码一样,您也不希望在应用程序代码中使用特定于容器的代码。

你是对的,在许多情况下,需要为他们的工具编写代码。例如,如果需要自定义类型,可以编写一些特定于hibernate的代码,或者如果需要自定义应用程序上下文,可以编写一些特定于Spring的代码。没有什么不妥。关键是要将它与应用程序的其他功能片分开。

这并不保证"即时"可移植性。它所推动的是能够将代码移植到其他地方"轻松"。 "轻松"在这种情况下并不意味着没有工作。相反,它意味着你不必开始扯掉Spring特定的东西,因为你已经决定转向Pico。换句话说,您的核心业务功能保持不变,您所要做的就是在决定移动时移植配置或容器特定的依赖项。

答案 1 :(得分:1)

与软件开发中的所有抽象一样,您只是在使用框架时移动“问题”。框架会处理某些事情,因此应用程序的其他部分不需要知道如何执行此操作。例如。如果使用依赖注入,那么注入的类不需要知道如何创建它们的依赖项,它由依赖注入框架处理。

但这只意味着知识/责任被移动了。永远不会重新 - 移动。所以是的,当然你的代码隐含地依赖于那个框架。但是,如果您将框架相关代码移动到一个位置,甚至可能引入一些接口来包装它,您有时可以使其代码的其余部分依赖于 a 接口,类或框架而不是特定的框架。

E.g。我在代码中引入了一个 IIocContainer 接口,只有 Resolve 方法。实现此接口的对象拥有如何调用特定Ioc / DI框架的知识。但这种知识只存在于这一个目标中。我的应用程序的其余部分(如果需要)只知道 IIocContainer 接口,因此不依赖于特定的框架。如果我更改框架,我只需要更改引用和配置(可能是XML,而不是影响代码),并使用一个不同的对象来实现此容器的 IIocContainer

当您谈论直接影响代码结构/体系结构的框架时(例如通过基类,命名约定等),这意味着抽象出特定框架变得更加困难。你可以,但你基本上要做的是围绕另一个框架编写自己的框架。它不值得诡计,因为最终如果你要转换结构框架,那么总是会通过直接重写该框架或通过抽象框架来完成大量的工作程。

我认为你可以简单地说:如果你正在使用一个框架将'很多结构化管道'的问题转移到该框架中(让框架为你处理管道)并切换框架你马上就会得到'很多结构性管道'的问题。 : - )