data binding - data - ¿El enlace de datos es una mala idea?
xamarin change label text (10)
Otra discusión (¡hemos estado teniendo muchos de ellos en estos días!) En nuestro trabajo es si el enlace de datos es una mala idea o no.
Personalmente, creo que es un Bad Thing ™.
Una opinión fuerte, pero en verdad, sacas todas las razones equivocadas.
Evita mi marco MVP bien estructurado - con enlace de datos, la vista se comunica bidireccionalmente con un modelo. Ewww.
Supongo que depende de la implementación del enlace de datos. En los primeros años de mi carrera de programación, solía hacer muchos VBA para la programación de MS Access y los formularios de Access tenían de hecho este enlace directo a tablas / campos en la base de datos.
La mayoría de los lenguajes / frameworks de propósito general tienen enlace de datos como un componente separado, no usan un enlace directo y generalmente se consideran como un dropin genérico fácil para un controlador en el sentido de patrón MVC.
Promueve la conexión de los controles de vista a los campos de datos en el momento del diseño. En mi experiencia, esto lleva a que el código vital (columna de enlace A al campo X) sea oscuro y esté oculto en algún archivo de diseñador. IMO este código debe ser explícito y directo, de modo que sea fácil de modificar y ver lo que está sucediendo, sin tener que utilizar una interfaz de diseñador torpe.
¿Supongo que estás hablando de la unión en WinForms?
Mi experiencia con las formas ganadoras viene de hace mucho tiempo, por lo que podría estar bastante desactualizado aquí. Seguramente es una función de conveniencia, y yo lo desaconsejaría fuertemente, a menos que esté escribiendo interfaces de estilo CRUD de contexto modal realmente simples.
En relación con el punto n. ° 1, esta vinculación directa hace que sea más difícil aislar cada componente (vista, modelo, controlador / presentador) y la prueba unitaria.
Nuevamente, suponiendo que la vista (¿un widget en WinFoms?) Está vinculada con la conciencia de enlace de datos, tiene razón.
Pero para mí, el enlace de datos se convierte en un obstáculo mucho mayor cuando se trata de una gran aplicación centrada en datos.
Muy al contrario: si el enlace de datos se implementa como un componente independiente (por ejemplo, vinculaciones en Cocoa o JFace DataBinding o JGoodies Binding), eso actúa como un controlador entre View y un modelo, cuidando todos los detalles del manejo de eventos y conversión y validación, entonces es mucho más fácil de usar, cambiar y reemplazar que su código de controlador personalizado haciendo exactamente lo mismo.
El único inconveniente de un marco de enlace de datos de propósito general es que si el enlace está desactivado y / o mal configurado, las interacciones entre las partes enlazadas son simplemente difíciles de depurar debido al nivel de abstracción dentro del código de enlace de datos ... Así que es mejor no cometer ningún error! ;)
Otra discusión (¡hemos estado teniendo muchos de ellos en estos días!) En nuestro trabajo es si el enlace de datos es una mala idea o no.
Personalmente, creo que es un Bad Thing ™.
Mis razones son tres veces:
Evita mi marco MVP bien estructurado - con enlace de datos, la vista se comunica bidireccionalmente con un modelo. Ewww.
Promueve la conexión de los controles de vista a los campos de datos en el momento del diseño. En mi experiencia, esto lleva a que el código vital (columna de enlace A al campo X) sea oscuro y esté oculto en algún archivo de diseñador. IMO este código debe ser explícito y directo, de modo que sea fácil de modificar y ver lo que está sucediendo, sin tener que utilizar una interfaz de diseñador torpe.
En relación con el punto n. ° 1, esta vinculación directa hace que sea más difícil aislar cada componente (vista, modelo, controlador / presentador) y la prueba unitaria.
Los beneficios son que es fácil de configurar y que puede aprovechar algunas características interesantes (validación, etc.) que vienen con la instalación ya hecha para usted.
Pero para mí, el enlace de datos se convierte en un obstáculo mucho mayor cuando se trata de una gran aplicación centrada en datos.
¿Alguna idea?
@ Punto 1: ¿No es el motor de enlace de datos el controlador, si realmente quiere pensar en patrones? Simplemente no lo programa usted mismo, que es el punto de utilizar el enlace de datos en primer lugar.
@Timbo:
Sí y no ... pero desde una perspectiva TDD me gustaría acordonar cada controlador para que pueda probarlo en forma aislada. Además, supongamos que queremos ejecutar cada edición a través de EditCommand (para que admitamos Undo, por ejemplo); para mí, esto excluye el enlace de datos.
@Chico:
Sí, este es exactamente mi Punto de vista. Para mí, la vinculación de datos es ideal para aplicaciones muy simples, ¡pero no hacemos ninguna de ellas!
Como decimos en el Reino Unido, "es caballos para cursos"
Primero que nada, ¡estoy de acuerdo contigo! Pero...
Para las aplicaciones de nivel empresarial, pasar el tiempo extra en la arquitectura del sistema, el modelado y los estándares le dará un sistema robusto y sostenible.
Pero tomará más tiempo desarrollarse (o al menos tardar más en llegar a una versión inicial) y esto puede no ser apropiado para cada sistema o cada parte del sistema.
A veces solo necesitas "terminarlo y hacerlo rápido". Para aplicaciones internas, sistemas administrativos y aplicaciones de mantenimiento que rara vez se usan o son muy dinámicos (el cambio de la especificación es frecuente), entonces hay poca justificación para construir la solución Rolls Royce para esto. Es mejor hacer que el desarrollador pase tiempo en la parte CRÍTICA del sistema.
Lo que debe evitar / evitar es utilizar estas soluciones de "un solo marco de trabajo" en el área MISSION CRITICAL del sistema donde se encuentra el área de gran tasa de transacciones y donde la calidad e integridad de los datos es crítica. ¡Pase tiempo de calidad afeitando los milisegundos en el área más usada del sistema!
Estoy totalmente de acuerdo con usted, el enlace de datos tiene inconvenientes ... En nuestra aplicación, si no se usa con cuidado, a veces nos lleva a una mala consistencia de los datos ...
Pero puede haber algunas formas elegantes de trabajar con enlaces de datos con formas grandes.
Por favor, dame tu opinión aquí: Cómo utilizar un marco vinculante de manera eficiente
He tenido algunas realizaciones inquebrantables sobre el enlace de datos en los últimos años:
La afirmación de que el enlace de datos permite que el negocio y la presentación se diseñen de forma aislada unos de otros está realmente bastante lejos de lo que realmente sucede en la realidad. Por lo general, las deficiencias en las tecnologías se vuelven evidentes y luego todo lo que ha hecho es separar la interfaz de usuario del negocio específico de UI y la separación resultante a menudo se vuelve mucho más difícil de manejar que un enfoque todo en uno.
La mayoría de los motores de enlace de datos (HTML / WPF / o lo que sea) hacen afirmaciones sobre el modelo de negocio técnico, y dado que el diseñador generalmente no está equipado para hacer dichas afirmaciones, el desarrollador termina teniendo que tocar la vista. No solo eso, la vista no debería estar haciendo aseveraciones sobre el modelo de negocios, en todo caso, debería ser al revés.
La mayoría de las veces, el modelo de vista / controlador / modelo / vista están todos "acoplados" y luego todo lo que realmente has hecho es "mover el código alrededor" en lugar de simplemente usar el código detrás. Dicho esto, encuentro que el enfoque más pragmático es a menudo simplemente usar el enlace de datos con moderación con el código subyacente y olvidarse de los patrones de MVVM / MVC.
Los desarrolladores a menudo ponen las preocupaciones de nivel de vista en el modelo de vista y luego comienzan a utilizar el enlace de datos como una muleta en lugar de un enfoque adecuado. por ejemplo, he visto tantos modelos de vista que controlan la visibilidad de los elementos de la interfaz de usuario.
Es cierto que el enlace de datos es útil para "sistemas pequeños". He observado que el rendimiento, la complejidad y la capacidad de mantenimiento sufren dramáticamente a medida que una aplicación crece en riqueza.
Las técnicas de uso de memoria con enlace de datos a menudo pueden convertirse en un peligro real. WPF, por ejemplo, usa MUCHOS trucos para evitar problemas y, a menudo, los desarrolladores aún pueden dispararse en el pie. A menos que esté usando algo como Sencha para HTML (creo), encontrará que su huella de memoria en sus aplicaciones comienza a sufrir incluso con una cantidad modesta de datos.
He encontrado que los patrones de enlace de datos / UI en general a veces tienden a romperse un poco cuando se trata de datos / presentación jerárquica y situacional.
Mi perspectiva personal sobre el enlace de datos es que es una herramienta que se puede abusar fácilmente pero que tiene algunos usos convincentes. Puedes decir lo mismo para cualquier técnica, patrón o pauta. Al igual que cualquier cosa, demasiado de algo tiende a convertirse en un problema. Tiendo a intentar usar el enfoque más pragmático para la situación. Prefiere la coherencia cuando es pragmático hacerlo, pero consistentemente ser pragmático. En otras palabras, no tienes que seguir el camino del desarrollo durante dos años y solo entonces llegar a la conclusión de que la base del código se ha convertido en un grotesco mamut apestoso en una tienda de porcelana llena de gatitos huérfanos.
...
No. DataBinding cuando se usa correctamente es Good Thing ™.
No; pero mira # 2 y # 3. Haga que el presentador exponga las propiedades / fuentes bien definidas para enlazar. No expongas el Modelo. Nada es eludido.
Estoy de acuerdo. No uso ninguna de las fuentes de datos estándar de ASP.NET. En cambio, utilizo GenericDataSourceControl que está conectado a un "método de selección" que devuelve tipos bien definidos. Los consumidores de DataSource en la vista solo conocen estos tipos de presentadores; nada mas.
No. Relativo al # 1. El presentador expone las propiedades / fuentes bien definidas para enlazar. Estos pueden ser probados sin la vista de la corrección (pruebas unitarias), y con la vista para la corrección de la aplicación (pruebas de integración).
(My Experience usa ASP.NET WebForms, que puede diferir de otros escenarios vinculantes de datos).
Siento que en muchos marcos, el enlace de datos es solo una excusa para hacer las cosas de la manera más fácil. A menudo resulta, como lo hace casi cualquier código generado por un diseñador, en demasiados códigos que son demasiado complicados y no se pueden modificar fácilmente. Nunca me encontré con una tarea que no podría hacer tan bien (si no mejor) y, en la mayoría de los casos, con la misma rapidez, mediante el enlace de datos que escribiendo el código yo mismo.
Utilicé el enlace de datos en grandes sistemas empresariales sin solución con un marco. En mi caso fue CSLA.
Funcionó muy bien, y fue extremadamente rápido para hacer funcionar la vista. Sin embargo, CSLA tiene mucho soporte para la encuadernación y la validación de datos.
Si rompe la marca de MVP, ¿y qué? si funciona mejor y más rápido y es más fácil de administrar. Sin embargo, yo diría que no rompe la patética en absoluto ... Puede conectar databind en el presentador ya que tiene una referencia a la vista y también al modelo.
por ejemplo, esto es lo que pondría en su presentador y llenaría el cuadro de lista o el control que desee.
myView.list.datasource = myModel.myCollection;
- También me gustaría señalar que el enlace de datos no debe tomarse como un todo o nada. Muchas veces utilizo enlaces de datos cuando tengo un requisito simple y fácil de UI para mapear a mi modelo de objetos. Sin embargo, cuando se necesita una funcionalidad especial, puedo poner algún código en el presentador para construir la vista como la necesito en lugar de utilizar el enlace de datos.
Alan
Utilicé enlaces de datos en algunos sistemas bastante grandes y descubrí que funciona bastante bien.
Parece que hago las cosas un poco diferente de ti ...
... No me enlace con el modelo, sino con una clase de vista dedicada que funciona como un adaptador entre la estructura del modelo y lo que necesito en la pantalla. Esto incluye cosas como proporcionar opciones para cuadros combinados y listas de vista, y así sucesivamente.
... Nunca configuré el enlace usando la IU. En cambio, tengo un único método (generalmente llamado Bind()
o BindXYZ()
que engancha todo en un solo lugar.
Mi modelo sigue siendo agnóstico, sin saber nada sobre la vinculación de datos; my Presenter se atiene a la coordenada de flujo de trabajo para la que está diseñado; mis vistas ahora también son clases simples (fáciles de probar) que encapsulan mi comportamiento de UI (está habilitado el botón X, etc.) y la UI real se relega a un simple auxiliar en el lateral.