分片还是不分片?

Posted

技术标签:

【中文标题】分片还是不分片?【英文标题】:To fragment or not to fragment? 【发布时间】:2012-12-01 15:57:18 【问题描述】:

随着我开始越来越多地采用 Fragments,而且随着 Fragments 功能的增加(Fragments in Fragments、MapFragments),我开始达到需要定义何时应该创建新视图/操作的地步作为片段还是作为活动?

一个Activity被定义为:

活动是用户可以做的一个单一的、专注的事情。

但是 Fragments 有点采用了该定义,如文档中所述:

例如,一个新闻应用程序可以使用一个片段来显示一个列表 左侧的文章和另一个片段显示文章 对——两个片段都出现在一个活动中

这是用户可以在一个带有两个 Fragment 的 Activity 中做的两件事。

所以我想要一些输入/帮助来确定什么是决定我应该将新动作/视图作为片段还是作为活动的最佳方法?

【问题讨论】:

介意解释一下新视图是什么?这真的取决于你将要使用这个新视图/动作做什么 喜欢从列表到细节等等。 但是假设我们有一个选项卡活动,每个选项卡中都有列表,并且操作栏项目也有内容要显示。 片段通常适用于将多种类型的视图/功能捆绑在一起。在您的情况下,听起来您希望为您的列表提供一个片段,并为您的详细信息提供一个片段。这使您可以灵活地在您想要的地方重用您的片段,将片段放置在您需要的地方,即时替换您的片段......等等等等。片段有很多优势 @dymmeh 我同意,这就是我大量采用它的原因。但是我刚刚有一个项目,其主要活动涉及许多代码行,除了在片段启动/替换片段等之间进行通信之外什么都不做。所以这只是要走的路还是我错过了什么? 【参考方案1】:

答案取决于您和您的开发实践(或您公司的开发实践)。然而,我的观点是:至少,如果你认为正在开发的功能可以在多个活动中使用,或者如果它可以在一个活动中与另一个视图一起使用(如在平板电脑上),那么你应该做到这一点一个片段。

我们最近采用了在所有情况下都创建片段的理念。我们的活动现在只是***协调员,基本上是把事情联系在一起的粘合剂。这使得架构一致且灵活。这对我们很重要,因为我们在几个地方有许多工程师在处理代码。

【讨论】:

在所有情况下创建片段也是我的理念,但有时你只是有这些巨大的案例,这让你怀疑这是否是一个好的面向对象实践...... 是的,我们也有。但是,当我需要编辑其他开发人员的代码时,我知道这种模式,并且可以很容易地分析代码。使用这种模式的投资回报率对我们有用。您必须询问它是否适合您。 还有其他选项可以让活动更轻松,并避免给它们两个角色,例如 1) 成为片段容器和 2) 片段的 ui 逻辑的协调者。这将导致缺乏内聚力,而耦合会使片段重用变得更加困难。您可以考虑使用 Event Bus 来协调 EventBus 或 Otto 等片段。【参考方案2】:

Activity 被定义为:“Activity 是用户可以做的单一的、专注的事情”

这更多的是过时的文档问题。 Activity 具有相同的定义......当我们使用较小的屏幕尺寸(例如,电话)时。随着您移动到更大的屏幕,活动比“单一、集中的事物”更复杂的几率会增加。

所以我想要一些输入/帮助来确定什么是决定我应该将新动作/视图作为片段还是作为活动的最佳方法?

这是我的一般启发式:

如果您预计某某 UI 可能独立存在于手机大小的屏幕上,但会与其他内容一起使用在平板电脑大小的屏幕上,请将其设为片段。

如果您预计某某 UI 将始终独立存在,只需创建一个简单的 Activity。

如果您预计自己的预测能力不是那么好,那就错在制造更多片段。例如,您可能会说,“嗯,帮助永远不需要与其他任何东西并列”,并使其成为一项活动。然后,如果您意识到 UI 的其他部分 可能会受益于与它们并排而不是单独关闭的帮助 - 这样用户就可以阅读文档并执行以下操作同时——你会后悔没有把帮助变成一个片段,因为你将不得不做一些重新工作。

1234563 成为单个小部件,采用自定义 ViewViewGroup 的形式。

但是,正如 jsmith 所说,没有普遍的正确或错误答案。顺便说一句,AFAIAC,jsmith 的答案在这里是正确的,但我对他的答案的评论太罗嗦了...... :-)

【讨论】:

【参考方案3】:

我从 1.5 开始就在 android 上进行开发,所以我一直在开发很长一段时间的活动和最近的片段。

经常有碎片让我嘴里有酸味......一个例子是当我需要一种带有按钮的分页仪表板时。为此,我使用了 ViewPager + 每个按钮 1 个片段。我遇到了各种各样的问题,因为在 Android 4.2 之前,片段无法嵌套。

另一个问题是片段的异步功能模式,当需要从一个地方快速移动到另一个地方时,它会出现各种错误行为。

不要认为一切都很糟糕......在更简单的情况下,使用片段效果很好。

因此,在我看来,只要您有一个独立的区域,在视图上不经常移动,可以在多个屏幕中重复使用,并且您支持平板电脑(或未来的平板电脑),使用它。

如果您需要嵌套片段、频繁重新排列的视图或不会重用的代码,请不要这样做。

【讨论】:

以上是关于分片还是不分片?的主要内容,如果未能解决你的问题,请参考以下文章

webuploader 文件分片上传 ?node接口

ES学习之分片路由

ES集群 分片UNASSIGNED

mysql分区/分片

elasticsearch 路由文档到分片

MogoDB 分片键