将公共ViewController表示逻辑移动到Presentation Helper类中是否可以

时间:2014-11-22 13:02:50

标签: swift ios8 xcode6

我尝试使用图层来确保将所有内容分成我的Swift / iOS / Xcode 6项目中的正确区域。问题,最终,是:将常用的表示级逻辑移动到单独的表示助手类而不是在多个视图控制器中反复编写而几乎没有差异的常见做法是什么?

以下是将此与此相关联并提供上下文的示例:

我的目标之一是使用UITableView显示报告数据。这个UITableView将包含7-10行,具体取决于用户的首选项(nsuserdefaults)。每行包含标签的本地化字符串和一些十进制值。

作为一个例子,一行可以是"本周销售:$ 500.00"

我有一个报告服务类,负责与数据库通信并返回/实例化报告对象。此报告对象包含报告的原始数据,即您本周,本月,今年等的数据。用户是否要显示所有这些值与服务无关 - 它只是获取所有内容。 / p>

因为我有3个使用同一报告的视图模型,我认为每次检查用户的首选项时重写相同的代码是错误的,然后创建/绑定数组到UITable并匹配包含服务返回的对象的报告值的标签。

我认为,更好的方法是创建一个表示级别的帮助程序类,其作用是获取一个报表对象(我之前提到的包含报表值的事物),获取用户的首选项,然后更通用地组合它们以创建与其各自的报告值匹配的本地化字符串列表,与视图控制器想要的内容无关。也许如果该需求稍后更改(不同的视图控制器需要更多自定义),我可以在该类中使用标志或不同的函数名称。

这样我所要做的就像是

 var report = ReportHelper.GenerateReport(reportData, userSettings)

现在报告将是一个看起来像这样的对象(模拟JSON数据):

{"本周金额为#34;" 100美元","本月金额为#34;" $ 500",&# 34;今年的金额":" $ 10,000"}

我可以在任何视图控制器中使用它。

另一种方法是硬编码那些上面的值(显然仍然是拉动本地化的字符串),但我不知道是否根据用户偏好+格式添加所有这些字符串+检查。将它移开似乎更优雅。

谢谢!

1 个答案:

答案 0 :(得分:0)

我对你提出明确答案的问题知之甚少,但基本上你有两个选择:
- 继承
- 作文

我个人喜欢继承,虽然经常声明你应该选择合成而不是继承。

你的助手听起来有点像作曲,所以这将是首选设置。根据我理解的具体问题,继承会导致数据重复,因此这是选择组合的另一个参数。

总而言之,你似乎是正确的

编辑:
继承是一个"是"关系,而作文是"有"关系。 有关构图的更多详细信息,请参阅http://en.wikipedia.org/wiki/Object_composition。 有关选择合成的原因和时间的更多信息,请参阅http://en.wikipedia.org/wiki/Composition_over_inheritance