我正在尝试使用层来确保在我的Swift / iOS / Xcode 6项目中将所有内容都划分为正确的区域。最终,的问题是:将常用的表示级逻辑移动到单独的表示助手类,而不是在多个视图控制器中反复写入它,而没有什么区别吗?
下面是一个将其联系在一起并给出上下文的示例:
我的目标之一是使用UITableView来显示报表数据。这个UITableView将包含7-10行,这取决于用户的首选项(nsuserdefaults默认值)。每行包含标签的本地化字符串和一些十进制值。
举个例子,一排可能是“本周销售额:500.00美元”。
我有一个报告服务类,它负责与数据库对话,并返回/实例化报表对象。这个report对象包含报表的原始数据,即您在本周、本月、今年等做了多少钱。用户是否想显示所有这些值与服务无关--它只是得到了所有的东西。
因此,由于我有三个视图模型使用相同的报表,所以我认为,每次检查用户的首选项,然后创建/绑定一个数组到UITable,并将标签与服务返回的对象中的报表值匹配,重写相同的代码是错误的。
我认为,一个更好的方法是创建一个表示级助手类,其任务是接受一个报表对象(我之前提到的包含报表值的东西),接受用户的首选项,然后更笼统地将它们组合起来,创建一个与其各自的报表值匹配的本地化字符串列表,这与视图控制器想要的内容无关。也许以后如果需求发生变化(不同的视图控制器需要更多的定制),我可以在该类中使用标志或不同的函数名。
这样我所要做的就是
var report = ReportHelper.GenerateReport(reportData, userSettings)现在,report将是一个类似于此的对象(模拟JSON数据):
{“本周的金额”:“100美元”,“本月的金额”:“500美元”,“今年的金额”:“10,000美元”}
我可以在任何视图控制器中使用这个。
另一种方法是只对上面的值进行硬编码(显然仍在拉本地化字符串),但我不知道是否添加了所有这些字符串+基于用户首选项+格式的检查。把它搬开似乎更优雅。
谢谢!
发布于 2014-11-22 16:55:00
我对你的问题知之甚少,无法给出明确的答案,但基本上你有两个选择:
我个人喜欢继承,虽然经常说你应该选择组合而不是继承。
您的助手听起来有点像组合,所以这将是首选的设置。根据我所理解的具体问题,继承将导致数据的重复,因此这是选择组合的另一个论据。
所以总的来说你似乎是对的
编辑:
继承是一种“是”关系,而构成是一种“有”关系。有关组合的更多细节,请参见composition。查看inheritance以获得更多信息,以了解为什么和何时选择作文
https://stackoverflow.com/questions/27077675
复制相似问题