假设我正在构建一个类似Twitter的社交网络,并且正在尝试为显示用户信息构建ProfileViewController
。首先,我将创建一个名为ProfileViewController
的类,并将其连接到Storyboard中的UITableViewController
。
现在,我想根据哪个用户正在查看哪个配置文件来自定义ProfileViewController
。如果我正在查看自己的个人资料,我可能会有一个“编辑”按钮,而如果其他人正在查看我的个人资料,则会有一个“关注”按钮。但是基本模板是相同的,它仍然需要显示像最新帖子这样的常见内容。
我可以采取的一些方法:
使用相同的ProfileViewController
课程。例如,我可以在Storyboard上有多个ProfileViewControllers
实例,并使用每个restorationId
来区分当用户点击“Profile”时被调用的ProfileViewController与被调用的ProfileViewController
当用户访问其他人的个人资料时。
为每个目的创建ProfileViewController
的不同版本。我可以专门创建一个类MyProfileViewController
来处理我自己的个人资料,并创建一个类UserProfileViewController
来处理其他用户的个人资料。
我不确定最佳做法是什么。有人可以帮忙吗?
答案 0 :(得分:2)
虽然你是专门询问故事板场景和ViewController,但问题更普遍地说是:
'我应该有一个类,它具有以两种不同的方式行动的逻辑,给定一些状态确定变量,或两个不同的类?'
拥有一个类的动机是因为大部分逻辑是共享的,并且您不想重复代码(和错误)。这是一个很好的动力。
拥有两个类的论点是你摆脱了if / else代码,它可以通过降低复杂性并使类更精确地定义它们的确切目的来减少错误。这也是一个很好的动力。
幸运的是,你可以拥有两全其美。有三节课。
第一个类A将实现两种情况共有的所有逻辑。在您的情况下,除了“我的个人资料”视图的“编辑”按钮之外,这将具有所有逻辑,并且可能类似于“其他个人资料”视图的“添加朋友”按钮。
第二类B和第三类C将分别实现“编辑按钮”和“添加朋友按钮”的逻辑,并且还使用第一类用于公共逻辑。您可以将第一个类的关系从A类继承,或者委托给A类的实例。在这种情况下,使用派生通常是最好的,在这种情况下,您可以确保所有基类功能与两个子类同等相关,并且您不介意在公共接口中公开派生。