3

我听到很多人在设计软件时建议,围绕对第三方 API 库的调用构建一个抽象层是一种很好的做法。

所以,如果我理解正确,比如说我正在使用 jQuery 构建一个 Web 应用程序。我需要围绕 jQuery 构建一个抽象层,并让我的应用程序代码的其余部分使用我的抽象 API,而不是直接调用 jQuery。

我的问题:

  1. 这是一个有效的建议吗?
  2. 这不会增加代码复杂性吗?
  3. 这条规则有例外吗?
  4. 这不会抵消抽象和可重用性的好处吗?
  5. 拥有这一层是否有意义,超出了该解决方案似乎过度设计?

提前致谢!

4

2 回答 2

2

jQuery 是一个高度可用的 API,旨在在“应用程序代码”级别非常有效地工作。它不应该需要抽象&你不会从这样做中受益。

您可能会发现在构建一些“库组件”或在其上构建少量库代码时有用——将重复 UI 组件和模式的应用程序级使用分解到您的应用程序中。

一般来说,“抽象一切”的建议听起来大多是错误的。抽象用于您将或可能必须使可互换的事物。不需要的抽象是被误导的,没有用的,否则只会付出代价。

jQuery 已经是一个抽象层,所以告诉你这个的人并不知道他们在谈论什么。

除了抽象之外,更常见的情况(对于 jQuery 以外的其他库)是它们是在“库实现”或 SPI 级别设计的,低于应用程序代码运行的级别。

在这种情况下,构建您自己的库代码/类(例如 reader、writer、builder 和其他“面向任务”的类)通常很有用,以供您的应用程序代码使用应用程序级 API,以及开车去图书馆。但同样,这不是抽象。

实际使用抽象的三个最有用的地方是:

  1. 数据库可移植性——使用 Hibernate,不依赖特定于 DB 的生成器;和
  2. 应用服务器/操作系统可移植性。Java 和 servlets/JSP 两者兼而有之。
  3. 配置。例如,通过像 Spring 这样的框架。
于 2013-11-05T03:36:06.713 回答
1

如果您正在构建一个相当复杂的 Web 应用程序(UI、交互和数据繁重),那么仅 jQuery(本质上只是一个非常好的 DOM 操作和 AJAX 库)不会为您提供构建客户端所需的工具以可维护的方式编写代码。

我认为你听到人们谈论的抽象是最近几年开始出现的各种客户端框架,例如BackboneKnockoutAngularEmber,其中大多数使用(或可以使用)jQuery 来实现它的东西擅长,主要是 DOM 操作。

这些框架中的任何一个都将为您提供以模块化和可维护的方式构建代码所需的工具,而无需重新发明轮子。如果您的 Web 应用程序非常复杂(或随着时间的推移可能变得复杂),我强烈建议您将上述之一作为起点。

于 2013-11-05T10:47:49.167 回答