在MVC模式中,视图是否应包含它所呈现的模型?
例如,我有一个Item模型,ItemsListView& ItemRowView显示它。 为了显示列表,我应该将Item模型传递给ItemRowView(1)还是我可以将Item.title,Item.details,Item.image等传递给ItemRowView(2)
在(1)中,它违反了MVC设计模式,其中View不直接与Model交谈,而View也可以调用Model方法
在(2)中,当使View虚拟时,如果在另一个ViewController中,我们使用ItemsList一个增益,我们必须再次复制传递的参数,如果我们需要再向用户传递一个属性会发生什么?
还有另外一种方法,使用ViewModel来包装模型以处理UI逻辑,但这将创建许多类,每次我获得模型列表时,我还必须将其映射到ViewModels
示例:
class ItemModel {
var name: String = ""
var price: Double = 9000
}
我应该像这样将模型分配给UITableViewCell :(因此,当新数据出现时,单元格可以自行更新数据)
class ItemTableViewCell: UITableViewCell {
@IBOutlet var titleLabel: UILabel!
var item: ItemModel! {
didSet {
self.updateUI()
}
}
func updateUI() {
titleLabel.text = item.name
}
}
或者我应该保持单元格虚拟,并在ViewController中执行更新UI:
class ItemTableViewCell: UITableViewCell {
@IBOutlet var titleLabel: UILabel!
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: ItemTableViewCell = tableView.dequeueReusableCell(withIdentifier: "ItemTableViewCell", for: indexPath)
var item = items[indexPath.row]
cell.titleLabel.text = item.name
return cell
}
答案 0 :(得分:0)
是。因为它使您能够使用模型本身的基本方法,而不是创建包装类并根据设计更改处理转换。
现在的经验法则是,如果该视图需要多个对象,则每个视图都有一个视图模型。这使您可以在不触及控制器的情况下处理设计和数据更改。