在我的应用程序中,我有多个UITableViewCell
. 我使用工厂类来实例化正确的类型并将它们提供给需要它们的人。工厂类获取一个参数,该参数是代表单元的数据对象。我认为这没关系,因为工厂是控制器的一部分。
Cellfactory* factory = [[Cellfactory alloc ] initWithData:data];
当该数据对象与其在工厂类中的视图表示进行映射时,问题就出现了。我想到了2个解决方案:
为了保留一个映射的字典,键将是数据对象类的字符串表示,值将是负责呈现该数据对象的视图类的字符串表示。这样,当工厂被要求提供基于数据对象的视图时,它将通过查看地图字典来知道要实例化哪个类。不利的一面是,如果您添加另一个数据对象,您也需要修改工厂方法(在其字典中添加一个新条目)
无论您添加多少新对象,都不需要修改工厂方法的更灵活的解决方案是保留负责在数据对象本身内部呈现数据对象的视图类的名称。但这将模型与视图耦合在一起,并且不知何故让模型不得不提供有关渲染的信息。
那么,这两者中哪一个是更好的长期选择?有没有其他选择可以击败他们?