故事板:已批准,但不推荐

自从在iOS 5中引入情节提要板以来,关于为iOS应用程序构建界面的最佳方法的争论一直很多。 尽管UI的可视化编辑器具有许多优点,但是许多开发人员拒绝使用它们,因为它们无法应对复杂的导航和UI层次结构。

Apple通过向OS X引入情节提要来大力鼓励使用情节提要。实际上,Apple Watch现在已要求使用情节提要,并且所有iOS项目模板默认都使用情节提要。 Xcode的最新更新甚至比以前选择在新项目中退出情节提要更耗时。

在Maxwell Forest,我们禁止使用情节提要板来支持程序化布局。 虽然我们可以看到将故事板用于小型项目和单独开发人员的好处,但我们发现在较大的团队环境中,故事板有很多缺点。 紧随其后,了解使用情节提要的利弊很重要。

长处

1.可视化

情节提要是出色的可视化工具,可封装视图表示和它们之间的过渡(segue)。 组织良好的情节提要可以轻松地从高层次了解应用程序流,功能以及应用程序中的视图如何协同工作。 这种可视化可以使刚接触项目的开发人员更容易掌握最新信息。

一个有效用于简单应用程序的情节提要

2.简单性

故事板也非常适合初学者,因为它们易于设置,并且只需最少的代码即可实现许多功能。 即使没有对自动版式的全面了解,简单的界面也可以快速实现,并且拖放界面对于人们学习如何开发比通过编程方式创建版式更加直观。

3.原型制作

Interface Builder具有强大的实用性:它可以使开发人员在没有设计背景的情况下设计出外观合理的UI。 它还允许熟练的设计人员对应用程序进行原型设计,并在工程师充实数据模型并微调UI细节之前将其显示给利益相关者。

弱点

情节提要的简单性和易用性很好,但是在开发更复杂的应用程序时,这也是它们最大的弱点。 在开发复杂的视图层次结构和交互时,尤其是在团队中工作时,Interface Builder的文件结构,工具和稳定性远非理想。

1. Interface Builder的稳定性和怪癖

Interface Builder已经走了很长一段路,但是仍然有其缺点。 例如,它不能在单个情节提要文件中处理大量屏幕,从而产生滞后并经常导致Xcode崩溃。 往返于关键视图控制器之间需要大量测试的应用程序流程可能很快就会陷入混乱,使在情节提要图板之间难以导航。 使用时,Interface Builder中的大多数操作都需要100%缩放,这进一步降低了可用性,尤其是在视图控制器之间拖动以创建序列时。 通过将情节提要分解为多个文件可以缓解这些问题,但是仍然难以管理,并且降低了情节提要作为可视化工具的有效性。

用于复杂UI的情节提要板可能很快变成一团糟

2.没有清晰界面的代码划分

当开发复杂的UI时,将实现分成两个文件,视图控制器和情节提要会使调试和维护变得烦人。 任何工作都需要在代码编辑器和Interface Builder之间进行上下文切换。 在繁忙的大型故事板上,这可能会令人厌烦并且令人生厌。

3.可重用性

可重用性在软件项目中对于减少重复,增加可维护性和错误至关重要。 故事板鼓励使用重复的视觉设计,并手动更改单个元素而非元素类别的属性。 为了使用情节提要板达到可接受的可重用性水平,必须将它们与NIB或程序化UI设计结合使用。

4.单个文件和合并冲突

对于任何严肃的开发,情节提要的最大缺点是它们是包含应用程序多个视图的单个文件。 在团队合作和使用源代码管理时(这应该一直如此),这会产生戏剧性。 只有一个文件意味着合并冲突要普遍得多,当必须使用XML处理冲突时,合并冲突会变得很混乱,这在使用Interface Builder进行更改后会变得非常棘手。 烦人的是,如果开发人员使用不同版本的Xcode,仅打开情节提要板文件将创建更改,这将导致合并冲突!

可以说,通过合理的任务管理可以使合并冲突最小化,但是大多数应用程序的大部分UI流程都集中在几个主屏幕上,并且大多数情况下,多个开发人员将在彼此非常接近的区域工作。 将一个文件与大多数应用程序紧密耦合会带来麻烦并浪费开发时间。

为什么Maxwell Forest不使用情节提要

问题故事板将严重程度与软件复杂性以及从事同一项目的开发人员的数量一起引入了开发过程。 减少情节提要缺陷的影响要求对与项目紧密耦合的单个文件的访问和交互进行微观管理。

由于软件的瞬时性和概念性,其本质上难以管理。 增加额外的复杂性不值得使用情节提要所获得的小收益,尤其是当其中一种替代方案(程序化UI)相对简单易学,难以置信的灵活性,易于重用且非常易于维护时。

既然我花了很多时间在没有情节提要的情况下进行开发,我可以肯定地说我不会在团队环境中使用它们。 程序化UI相对容易学习,具有难以置信的灵活性,可重用性,并且非常易于维护,而没有情节提要引入的其他管理问题。 在屏幕上进行诅咒的时间要少得多,而且我现在感觉比以往任何时候都更加高效。我没有在Interface Builder导航,滞后,崩溃和情节提要合并冲突上浪费开发时间。

卢克五世