1

我创建了一个使用 ARC 的应用程序,它解析来自在线 XML 文件的数据。我能够使用一个类和一个 API 调用来获得我需要的一切。API 提供 XML 数据。由于 xml 文件很大,我有很多与这个类相关的变量、IBOutlets 和 IBActions。

但是有两种方法:

1) 创建一个解析 XML 数据并为您的应用程序实现该数据的类,即创建一个可以完成所有操作的类(正如我已经完成的那样)

或者

2) 创建一个解析 XML 数据的类并创建其他类来处理从 XML 解析器类获得的数据,即一个类进行解析,另一个类实现该数据

请注意,某些提供 XML 数据的 API 会跟踪其服务的呼叫/分钟或呼叫/天数。因此,您不希望多个类调用 API,最好向接收您需要的所有数据的 API 发出一个请求。

那么是使用几个较小的类来处理 xml 数据更好,还是只使用一个大类来处理所有事情呢?

4

2 回答 2

2

如有疑问,小班会更好。

2) 创建一个解析 XML 数据的类并创建其他类来处理从 XML 解析器类获得的数据,即一个类进行解析,另一个类实现该数据

这样做的一个关键优势是后一类模型与前一类所做的解析工作是分开的。这变得很重要:

  • 正如 Peter Willsey 所说,当您的 XML 解析器发生变化时。例如,如果您从基于流的解析切换到基于文档的解析,反之亦然,或者如果您从一个解析库切换到另一个解析库。
  • 当您的 XML 输入发生更改时。如果您想添加对新格式或格式的新版本的支持,或者取消对过时格式的支持,您可以简单地添加/删除解析类;模型类可以保持不变(或者只接受小的和明显的改进以支持新/改进格式的新功能)。
  • 当您添加对非 XML 输入的支持时。例如,JSON、plist、键控存档或自定义专有格式。同样,您可以简单地添加/删除解析类;模型类不需要改变太多,如果有的话。

即使这些事情都没有发生,它们仍然比混合在一起更好。解析输入和建模用户数据是两个不同的工作;将它们混在一起会使它们难以或不可能单独推理。将它们分开,您可以更改其中一个而无需绕过另一个。

于 2012-04-26T01:06:51.573 回答
1

我想这取决于您的应用程序。需要考虑的是,如果您必须更改正在使用的 XML 解析器怎么办?你将不得不重写你的单体类,你可能会破坏很多不相关的功能。如果您抽象了 XML 解析器,那么只需重写该特定类的实现即可。或者,如果您的应用程序范围发生变化,突然您有多个视图怎么办?您能否在不违反 DRY(不要重复自己)原则的情况下在其他地方重用代码?

您要争取的是低耦合和高内聚,这意味着类不应相互依赖,类应具有明确的职责和高度相关的方法。

于 2012-04-25T21:42:15.827 回答