加快您的iOS开发:模块的范例

如果我们看一下图形,这个概念很容易理解。

我们只需要将您的应用视为ViewControllers件的集合,这些ViewControllers件可能会出现在ViewControllers任何位置。

这意味着,如果我们想在不同的ViewController重用“模块1”,则它应尽可能简单。

然后,我们推断ViewController将由Modules组成

为了开始使用模块,需要一种解决方法,这就是为什么我创建了一个Cocoapod库来帮助我们实现这一奇妙 范例的原因

FTMTableSectionModules

具有TableView的可重用ViewController,分为几节

cocoapods.org

FTMTableSectionModules 基本上包含2个类别:

  • ModulesViewControllerUIViewController的子类。 此类仅是已实现UITableViewDelegate UITableViewDataSource所有方法的代理。
    主要功能是根据所选部分将职责重定向到适当的模块。 此外,还公开了处理模块的方法,例如添加/删除/插入…
  • TableSectionModule ,AKA 模块NSObject的子类。 此类包含一些逻辑,以改善UITableView的生命周期 ,并使TableView的各个部分的隔离和可重用性变得更加容易。

在这里,我们描述了模块生命周期中最重要的步骤:

我想开始尝试我们已经有足够的信息,因此我们可以跳到有趣的事情……。 编码时间!


像往常一样,尝试开发中的新事物的最佳方法是创建一个“ Hello World!”。

第一步,创建一个HelloWorldModule作为TableSectionModule的子类

最后一步,我们错过了在MyFirstModulesVC中添加HelloWorldModule操作 。 超类ModulesViewController自动调用一个名为createModules的方法,因此我们需要重写此方法:


模块范例的主要关键之一是将责任划分到应用程序组成的不同部分。 这可以归纳为2条规则。

  • 模块内部发生的事情留在Module中
  • 在模块外部发生的事情留在ViewController中

与其用无聊的理论来解释,不如让我们举一些真实的例子。

模块内部会发生什么,请留在模块中。

想象一下,我们有应用程序的典型部分,您可以在其中显示和隐藏详细信息。
正如我在开始时提到的,尝试将应用视为模块的集合是非常重要的 在这种情况下,我们面对的是一个清晰的示例,我们需要创建一个新的模块。
在这里,我们可以看到一个示例,说明这个新模块的外观:

GIF可以猜到,我们在扩展和折叠信息时将插入和删除UITableViewCells 。 遵循第一条规则, Module具有足够的授予权和责任如何单独实现这一目标,因此这意味着对于ViewController ,折叠和展开将是完全透明的。

在这里,您是实现新FoldUnfoldModule的代码。

加起来

  • ViewController仅包含ModulesDelegates如果有)的列表。
  • Module包含视图(页眉/页脚/单元格)以及完全完成TableViewSection所需的每个逻辑

自从我们开始以来,已经提到过多次,这对于创建可以以最简单的方式在任何地方重复使用的组件非常重要。 再次证明这一点的最佳方法是使用实​​际示例。

到目前为止,我们已经创建了2个Modules HelloWorldModuleFoldUnfoldModule ,因此让我们在同一个ViewController上将这两个模块混合几次。

惊人!
我们必须突出显示一个非常重要的注释,在ViewController要实现此行为所需的行为35
您能想象,将所有内容集成到一个ViewController需要多少行? 并且显然失去了以后在不同的ViewControllers重用它的可能性。


在尝试使用范例之前,我们需要退后一步,从开发的角度到业务的角度,并通过质量检查,检查这对我们有何影响。

将代码更好地分隔在ModulesViewControllers之间的事实有助于减少开发冲突。 有多个成员在同一Module工作的可能性很小。
而且您可以为ViewController处理的冲突非常容易解决,它们通常只是添加方法。
除此之外, Pull Request更易于阅读,我们可以毫不费力地注意到,如果它们正在为特定的ViewControllers创建/更改/删除Modules

如果我们开始提出为什么它对我们的业务有用,那么我们收到了多少次新功能,它们提出了以下建议:

我们在应用程序的任何部分都具有相同的功能,只是做了一些小的更改,例如…。

你知道吗? 模块也可以被子类化 。 因此,我们可以在模块之间创建继承,从而在superclass中具有共同点,而仅在subclasses进行特定更改。 没有更好的方法来表示可伸缩性和可重用性

接下来,质量检查也是一个重要的重点。
使用模块时,我们可以轻松枚举针对新版本进行更改的模块。
它有助于减少我们需要进行回归测试的数量,并增加对我们产品质量的信心。

他们是否有足够的优势想尝试一下? 我认为是队友!


如果您只想在项目中包含模块,则只需在Podfile包含以下行:

pod 'FTMTableSectionModules'

Pod的具体存储库还包括一些示例:

fjtrujy / FTMTableSectionModules

具有TableView的可重用ViewController,分为几个小节(在这里称为模块),可帮助您在…中更快地开发。

github.com

如果您想拥有我们在此使用过的相同示例,或者甚至更详尽的示例,我还有一个附加的存储库,可能对您来说很有趣。
它包含几个模块,几乎没有几个像WhatsApp和Facebook应用程序中使用的某些组件。

fjtrujy /模块示例

遵循模块范例实现的示例应用程序— fjtrujy / module-examples

github.com

只需下载它,然后单击播放按钮,您就不会后悔!


如果您尝试使用Modules’s Paradigm ,我将很乐意听到有关它的信息。 或者,嘿,如果您认为这没有道理,请让我也知道。 欢迎评论,不要害羞!

就像该条目的标题正确地指出的那样,这是第一部分 ,我的想法是创建第二部分 ,在这里我将尝试使复杂的UITableViewCell变得神秘