¿Cuáles son los beneficios de separar el origen de datos de UITableViewController?

He leído que separar el origen de datos de ViewController es una buena idea, ya que networkinguce la hinchazón y el acoplamiento del código.

Entonces decidí hacer un object separado como fuente de datos de TableView. Todo estuvo bien y dandy hasta que los necesité:

  1. Necesito puntero a la vista de mi tabla para volver a cargarlo cuando llegan nuevos datos. Esto solo dificulta este desacoplamiento, ya que el origen de datos conoce la vista de tabla y, a través de él, acerca del controller de vista.

  2. Ahora necesito mostrar el controller de visualización de detalles al toque. Ahora necesito un puntero para el controller de vista actual. Esto se puede hacer a través de la vista de tabla o como propiedad separada.

Entonces, estas dos cosas eliminan en mi mente cualquier desacoplamiento o separación, y solo agregan complicaciones.

¿Cuáles son los beneficios de separar la fuente de datos del uso en el controller de vista?

Como usted es indudablemente familiar del paradigma de Model View Controller, separar la fuente de datos de TableView del controller no solo networkinguce la hinchazón y el temido problema "Massive ViewController". Realmente promueve la reutilización de fonts de datos y aclara la responsabilidad de su controller.

Dicho esto, hubo una charla fantástica en los años WWDC titulada " Interfaces de usuario avanzadas con vistas de recostackción " (Sesión 232). Les pido que vean este video porque en él tenemos la primera visión real de los patrones arquitectónicos empleados por los equipos iOS en Apple.

En el video verá que sus celdas de vista de colección realmente se devuelven desde el origen de datos. Dando un paso más allá, en realidad crean fonts de datos agregadas que componen varias fonts de datos en un model común. De esta forma, termina con una architecture que le permite reutilizar las celdas en cualquier controller de vista. Todo lo que se necesita es configurar las fonts de datos apropiadas.

Con respecto a su primer punto: Necesita un puntero a la table. Esto no es verdad. Su fuente de datos puede comunicarse con el controller a través de una callback delegada, notificando al controller que recargue las celdas en ciertas routes de índice.

Nuevamente, si necesita manejar events de toma que también son fáciles, el event handling toma puede seguir residiendo en su controller. Simplemente puede preguntar a su fuente de datos para qué controller volver para una ruta de índice determinada.

Como ejemplo simple, imagine que tenemos una tabla que muestra una list de las mejores películas en taquilla y sus calificaciones en vivo.

Ahora queremos crear nuestras fonts de datos. La fuente de datos debería ser responsable de search la información del server, devolver la celda apropiada configurada con los datos correctos y registrar las celdas reutilizables con una vista de tabla. Esta información también está en vivo y, por lo tanto, puede actualizarse en cualquier momento, por lo que la fuente de datos debe comunicarse con el controller para señalizar las actualizaciones.

Entonces, nuestra fuente de datos de película podría verse así:

@interface FilmDataSource : NSObject<UITableViewDataSource> @property (assign,nonatomic) id<FilmDataSourceDelegate> delegate; - (void)registerReusableViewsWithTableView:(UITableView *)tableView; - (void)reloadContent; - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; @end @protocol FilmDataSourceDelegate <NSObject> - (void)dataSource:(FilmDataSource *)dataSource didUpdateItemsAtIndexPaths:(NSArray *)indexPaths; - (void)dataSourceDidRequestReload:(FilmDataSource *)dataSource; @end 

Recuerde que la fuente de datos también sabrá si alguna de las requestes ha fallado y, por lo tanto, potencialmente puede devolver una celda con un button de rebash. La fuente de datos podría manejar la request de actualización y desencadenar una actualización del controller cuando obtiene información.

Naturalmente, este layout se vuelve más atractivo a medida que comienza a decidir sobre múltiples fonts de datos. El truco consiste en ver qué celdas de la vista de tabla deben pertenecer a una fuente de datos en particular porque la key aquí es promover la reutilización. Luego puede pasar a diseñar una fuente de datos agregada que administre sus propios hijos.