Мне нужно настроить настраиваемую ячейку табличного представления с содержимым модельного объекта. Какой шаблон дизайна предпочтителен? Я не ищу «правильный» ответ, просто хорошее обсуждение плюсов и минусов.
1) Вручную настройте ячейку в configureCell: atIndexPath:?
- configureCell:atIndexPath:
{
myCell.field1 = modelObject.field1 ;
myCell.field2 = modelObject.field2 ;
}
2) Просто код пользовательской ячейки, чтобы принять объект модели и передать объект модели оптом в ячейку в configureCell: atIndexPath:?
- configureCell:atIndexPath:
{
myCell.model = modelObject ;
}
Согласно Закону Деметры , возможно, (1) лучше. Однако, когда ячейка должна обрабатывать действия пользователя, является ли просмотр таблицы более подходящим контроллером или самой ячейкой (используйте ячейку как ViewModel )? Я думаю, что последний может сделать для более ясного кода:
1) Поведение с представлением таблицы в качестве контроллера
// tableview
- configureCell:atIndexPath:
{
myCell.field1 = model.field1 ;
myCell.button.delegate = myDelegate ; // have to define MyDelegate protocol
}
// Call behavior in cell
[self.button.delegate delegateCall] ;
// delegate
- (void) delegateCall
{
// find out which cell was manipulated
// find the object associated with the table cell
[theFoundModelObject myBehavior] ;
}
2) Поведение ячейки в качестве модели представления:
- configureCell:atIndexPath:
{
myCell.model = modelObject ; // cell has direct access to model behavior
}
// Call behavior in cell
[self.model myBehavior] ;