我正在使用几种不同的服务来显示来自Feed的文章。它们都可以使用一个视图控制器显示,但是我必须创建一个属性来指示用户来自哪个服务,并在每次我想对这些文章做某些事情时进行检查。
我有这种方法的经验 - 并且相信我有很多意大利面条代码,只是为了检查它是什么服务,来决定每项服务的作用,它有点混乱。
所以我有两个选择:
1st - 重复使用ArticlesViewController进行所有服务,但要检查哪些文章来自哪个,并根据我想编辑这些文章的内容做不同的事情。
2nd - 为每个服务制作FacebookArticlesViewController,TwitterArticlesViewController,SinaWeiboArticlesViewController(只是示例),并分离逻辑。
您认为最佳方法是什么?
答案 0 :(得分:5)
惊喜第三种选择!
制作名为ArticlesViewControllerSourceDelegate
的协议或基类。对于ArticlesViewController
中您的逻辑因文章来源而异的每个地方,请将选择器添加到ArticlesViewControllerSourceDelegate
。
然后为每个文章来源制作ArticlesViewControllerSourceDelegate
的实现或子类。
答案 1 :(得分:1)
第一个选项更好,因为您不复制任何代码。将来,如果您需要更改UI,则必须在一个地方更改它。如果你采用第二种方法,你将不得不改变所有视图控制器中的东西,并且很有可能你会错过任何东西。
此外,您可以做的是,使用所有常见内容创建父文章视图控制器,并仅为需要大量自定义的那些类型的文章继承单独的文章视图控制器。
如果您的文章中的差异主要与业务逻辑而非UI有关,那么最好让单独的业务层管理所有这些内容。当然,您可以在上面的段落中为这些业务层实现相同类型的继承。