MVC模式下两种UITableViewCell配置方式的优劣咨询
哪种UITableViewCell配置方式更适配MVC模式?
嘿,针对你纠结的这两种UITableViewCell配置方式,毫无疑问方式一更贴合MVC的设计核心,咱们来掰扯清楚原因:
1. 严格遵循MVC的职责分离原则
MVC的核心就是各司其职:
- **视图(UITableViewCell)**的职责是处理自身的UI展示细节——比如文本内容、字体大小、颜色这些都属于视图该管的事。
- **控制器(ViewController)**只需要扮演“中间人”的角色:从模型层拿数据,然后传递给视图,至于视图怎么把数据变成可视化的内容,控制器完全不用插手。
方式二中,控制器直接操作cell的quantityLabel、productNameLabel的属性,相当于把视图的工作抢过来做了,既让控制器的代码变得臃肿,也破坏了MVC的职责边界。
2. 代码复用&维护性拉满
- 要是以后另一个页面也需要用到这个
NeedProductsTableViewCell,方式一只要调用configurateWithItem传数据就行,不用重复写一遍字体、颜色的配置代码;方式二则得把那些UI设置代码复制粘贴一遍,冗余还容易出错。 - 哪天产品说要把商品名称的字体改成16号粗体,或者数量标签换成橙色,方式一只要修改cell类里的
configurateWithItem方法,所有用到这个cell的地方都会自动更新;方式二就得翻遍所有用到这个cell的控制器,一个一个修改,维护成本直接翻倍。
额外的优化建议
其实还可以再往前迈一步,把数据封装成一个Model类,这样更贴合MVC中模型层的作用:
// 定义产品模型 struct Product { let quantity: String let name: String }
然后把cell的配置方法改成接收这个Model:
class NeedProductsTableViewCell: UITableViewCell { @IBOutlet weak var quantityLabel: UILabel! @IBOutlet weak var productNameLabel: UILabel! func configure(with product: Product) { quantityLabel.text = product.quantity quantityLabel.textColor = .systemGray quantityLabel.font = quantityLabel.font.withSize(14) productNameLabel.text = product.name productNameLabel.font = .boldSystemFont(ofSize: 14) } }
控制器里的代码会更简洁:
// 假设products是[Product]类型的数组 let product = products[indexPath.row] cell.configure(with: product)
这样数据和视图的边界更清晰,代码也更易读易维护。
内容的提问来源于stack exchange,提问作者Triker
相关产品推荐
相关产品推荐

