2008-09-01 5 views

Respuesta

10

Si está trabajando con código heredado (p., aplicaciones portadas de .NET 1.xa 2.0 o 3.5), entonces sería una mala idea apartarse de los conjuntos de datos. ¿Por qué cambiar algo que ya funciona?

Si no está, sin embargo, la creación de una nueva aplicaciones, hay algunas cosas que se pueden citar:

  • Apelación a experimentar dolor en el mantenimiento de las aplicaciones que se pegan con conjuntos de datos
  • Cite beneficios de rendimiento para su nuevo enfoque
  • Cebarlos con un buen término medio. Vaya a .NET 3.5 y promocione LINQ to SQL, por ejemplo: mientras sigue apegado a la arquitectura basada en datos, es una enorme y enorme salida para los conjuntos de datos indexados por cadenas, y aplica ... ¡voila! Colecciones personalizadas de una manera que está oculta para ellos.

Lo que es importante es que cualquier enfoque que utilice se mantendrá constante, y usted es completamente honesto con los pros y los contras de sus enfoques.

Si todo lo demás falla (por ejemplo, usted tiene un equipo de desarrollo que se niega a ceder por completo de las viejas prácticas y se muestra escéptico de aprender nuevas cosas), este es un muy, muy signo claro que usted ha pasado su equipo es hora de dejar su empresa!

+1

¿Promueve Linq2SQL? L2S está muerto: promueve EF en su lugar. – stephbu

+2

@stephbu - y EF está bajo revisión pesada, por lo que ninguno (en su forma actual) es una buena apuesta a largo plazo. Pero L2S requiere menos inversión/complejidad, por lo que (dado el flujo actual) que lo hace más atractivo que EF IMO. –

+3

veamos ... L2S está muerto ... EF está bajo revisión ... ¡oye!los conjuntos de datos parecen ser bastante estables, ¡tal vez deberíamos usarlos! ;-) –

3

Los conjuntos de datos/tablas no son tan malos, ¿verdad?

El mejor consejo que puedo dar es utilizarlo tanto como sea posible en su propio código, y con suerte a través de revisiones por pares y correcciones de errores, los otros desarrolladores verán cómo el código se vuelve más legible. (asegúrese de presionar el punto cuando ocurran estas ocurrencias).

En última instancia, si el código funciona, entonces el resto es semántica es mi opinión.

21

Hazlo por ejemplo y pisa ligeramente. Cualquier cosa más fuerte te alejará del resto del equipo.

Recuerda considerar la posibilidad de que estén en algo que te has perdido. Ser parte de un equipo significa tomar turnos para aprender & enseñando.

Ninguna persona tiene todas las respuestas.

2

Supongo que puede intentar vender la idea del mapeo O/R y herramientas de mapeo. El beneficio de tratar filas como objetos es bastante poderoso.

+0

tenga en cuenta que así es la ventaja de tratar las filas como filas de datos en lugar de forzarlas a términos de OO artificiales de lo que realmente son. – gbjbaanb

9

Recuerda considerar la posibilidad de que estén en algo que te has perdido. Ser parte de un equipo significa tomar turnos para aprender & enseñando.

En trámite. La idea de que el "desarrollo empresarial" es de algún modo distinto de (y generalmente la implicación es "más importante que") el desarrollo normal realmente me irrita.

Si realmente hay un beneficio en el uso de alguna tecnología, entonces deberá presentar una lista considerada de todos los pros y contras que ocurrirían si cambiara.
Presente esta lista a sus compañeros de trabajo junto con explicaciones y ejemplos para cada uno.

Tiene que ser realista al crear esta lista. No puedes simplemente decir "¡Nos ahorra mucho tiempo! ¡¡¡GANAR !!" sin abordar el hecho de que a veces tomará MÁS tiempo, se necesitarán X meses para acelerar la nueva tecnología, etc. Debe mostrar ejemplos concretos en los que ahorrará tiempo y exactamente cómo.

Del mismo modo, no puede simplemente ignorar las desventajas como si no importasen, sus compañeros de trabajo lo llamarán.
Si no haces estas cosas, o si aparentas presionar lo que a ti personalmente te gusta, nadie te tomará en serio, y obtendrás una reputación de ser el tipo que está lleno de entusiasmo y energía pero que tiene no tengo idea de nada.

BTW. Cuidado con esta estafa en particular. Se hará todo lo trompeta, a menos que tenga una gran cantidad de casos fuertes para todas sus otras cosas:

  • Requiere 12+ meses de trabajo portar nuestro código existente. Tú pierdes.
7

Por supuesto, "depende" de la situación. A veces, los DataSets o DataTables son más adecuados, como si realmente fuera una lógica de negocios bastante ligera, una jerarquía plana de entidades/registros, o con algunas capacidades de control de versiones.

colecciones de objetos personalizados brillan cuando se quiere implementar una jerarquía profunda /gráfico de objetos que no pueden ser representados de manera eficiente en tablas planas 2D. Lo que puede demostrar es un gran gráfico de objetos y hacer que ciertos eventos se propaguen por las ramas correctas sin invocar objetos inapropiados en otras ramas. De esta forma, no es necesario realizar un bucle o seleccionar a través de cada DataTable solo para obtener los registros secundarios. Por ejemplo, en un proyecto en el que participé hace dos años y medio, había un módulo de interfaz de usuario que se suponía que debía mostrar preguntas y controles de respuesta en un único DataGrid de WinForms (para ser más específico, era UltraGrid de Infragistics).) Algunos de los requisitos más difíciles

  • El control de respuesta para una pregunta puede ser nada - cuadro de texto, comprobar las opciones de caja, opciones de botones de radio, listas desplegables, o incluso para que aparezca un cuadro de diálogo personalizado que puede tirar más datos de un servicio web.
  • Según lo que haya respondido el usuario, puede hacer que aparezcan más subpreguntas directamente debajo de la pregunta principal. Si se da una respuesta diferente más tarde, debe exponer otro conjunto de subpreguntas (si las hay) relacionadas con esa respuesta.

La implementación original se escribió completamente en DataSets, DataTables y matrices. La cantidad de bucles a través de cientos de filas para varias tablas fue puramente alucinante. No ayudó a que el programador viniera desde un fondo de C++ intentando ref todo (hola, los objetos que viven en el montón usan variables de referencia , como punteros!). Nadie, ni siquiera el programador original, podría explicar por qué el código está haciendo lo que hace. Llegué a la escena más de seis meses después de esto, y aún estaba lleno de insectos. No es de extrañar que el desarrollador de segunda generación del que asumí decidiera renunciar.

Dos meses de vinculación para arreglar el desastre caótico, me encargué de rediseñar todo el módulo en un object-oriented graph to solve this problem. yeap, completo con clases abstractas (para representar diferentes respuestas de control en una celda de la grilla dependiendo del tipo de pregunta), delegados y eventos. El resultado final fue un DataGrid 2D enlazado a una jerarquía profunda de preguntas, ordenadas de forma natural de acuerdo con el arreglo padre-hijo. Cuando la respuesta de una pregunta principal cambiaba, se planteaba un evento a las preguntas de los niños y mostraban/ocultaban automáticamente sus filas en la cuadrícula de acuerdo con la respuesta de los padres. Solo los objetos de preguntas en esa ruta se vieron afectados. La capacidad de respuesta de la interfaz de usuario de esta solución en comparación con el método anterior fue de varios órdenes de magnitud.

1

No puede convencerlos de lo contrario. Elija un desafío más pequeño o muévase a una organización diferente. Si su gerente lo respeta, verá si puede hacer un proyecto en el estilo de dominio como una especie de prueba de tecnología.

2

Creo que deberías concentrarte en el rendimiento. Si puede crear una aplicación que muestra la diferencia de rendimiento cuando usa DataSets vs Custom Entities. Además, intente mostrarles los principios de diseño impulsado por el dominio y cómo encaja con los marcos de la entidad.

1

Si puede perfil, solo hágalo y perfil. Los conjuntos de datos son más pesados ​​que un simple Collection<T>

DataReaders son más rápido que utilizando los adaptadores ...

El cambio de comportamiento en un objeto es mucho más fácil que masajear un conjunto de datos

De todos modos: Just Do It, pedir perdón no permiso.

2

No lo convierta en una religión o discusión de fe. Esos son difíciles de ganar (y no es lo que quiere de todos modos)

No lo enmarque como lo hizo en su pregunta. El problema no es lograr que nadie acepte que de esta manera es la forma general en la que deberían funcionar. Debería hablar sobre cómo cada uno necesita pensar para tomar la decisión correcta en un momento dado. dé un ejemplo de cuándo usar dataSet y cuándo no.

Tenía desarrolladores que usaban dataTables para almacenar los datos que obtenían de la base de datos y luego tenían código de lógica de negocios usando esa datatable ... Y les mostré cómo reduje el tiempo para cargar una página de 7 segundos de CPU 100% (en el servidor web) a no poder ver el movimiento de la línea de CPU ... cambiando el objeto de memoria de la tabla de datos a la tabla Hash.

Por lo tanto, tome un ejemplo o caso que crea que es mejor implementarlo de manera diferente, y gane esa batalla. No luche contra una guerra de alto nivel ...

1

A la mayoría de los programadores no les gusta salirse de sus zonas de confort (tenga en cuenta que la intersección del conjunto 'más programadores' y el conjunto 'Desbordamiento de pila' es probablemente el conjunto vacío). "Si funcionó antes (o incluso funcionó), entonces sigue haciéndolo". El proyecto en el que estoy actualmente requirió un montón de argumentos para que los programadores más antiguos usen XML/esquemas/conjuntos de datos en lugar de solo archivos CSV (la versión anterior del software usaba los CSV). No es perfecto, los esquemas no son lo suficientemente robustos para validar los datos. Pero es un paso en la dirección correcta. El código que desarrollo utiliza abstracciones de OO en los conjuntos de datos en lugar de pasar los objetos del conjunto de datos. En general, es mejor enseñar con el ejemplo, un pequeño paso a la vez.

5

Irónicamente, quería hacer una pregunta que era exactamente lo contrario de esto. La mayoría de los programadores con los que he trabajado se han ido con el enfoque personalizado de objetos de datos/colecciones.Me rompe el corazón ver a alguien con su definición de tabla de SQL Server abierta en un monitor, escribiendo lentamente una clase coincidente de fila y contenedora en Visual Studio en otro monitor (completo con propiedades privadas y setters de getters para cada columna). Es especialmente doloroso si también son propensos a crear tablas de 60 columnas. Sé que hay sistemas ORM que pueden construir estas clases de forma automática, pero he visto que el enfoque manual se utiliza con mucha más frecuencia.

Las opciones de ingeniería siempre implican compensaciones entre los pros y los contras de las opciones disponibles. El enfoque centrado en DataSet tiene sus ventajas (representación en memoria similar a db-table de los datos db reales, clases escritas por personas que saben lo que están haciendo, familiares para un gran grupo de desarrolladores, etc.), al igual que los objetos de datos personalizados (comprobación de compilación, los usuarios no necesitan aprender SQL, etc.). Si todos los demás en su empresa van por la ruta del DataSet, es posible al menos técnicamente que los DataSets sean la mejor opción para lo que están haciendo.

+0

Puedo ver los pros y los contras de las dos opciones mencionadas, pero quería que los otros desarrolladores se alejaran de la ruta DataSet porque está tan estrechamente unida a la plataforma .NET. Si nos cambiamos a Java, por ejemplo, es posible que tengan que pasar más tiempo aprendiendo sobre conceptos puros de OOP –

+0

Te escucho, siempre es difícil hacer que la gente piense en nuevas formas de hacer las cosas. Estoy lo suficientemente atascado en mis formas que mi primer pensamiento después de leer su comentario fue "Me pregunto si Java tiene cosas como DataSets y DataTables". – MusiGenesis

+0

Una vez engañé a un compañero de trabajo para que tomara la otra dirección (objetos de datos a DataTables), pero la historia seguramente me decepcionaría, votaba aquí, y no creo que el truco sea reversible. :) – MusiGenesis

0

Ya hay algunos consejos muy buenos aquí, pero todavía tendrá un trabajo para convencer a sus colegas si todo lo que tiene que respaldar es unos pocos comentarios de apoyo en stackoverflow. Y, si son tan escépticos como suenan, vas a necesitar más munición. Primero, obtenga una copia de "Patrones de arquitectura empresarial" de Martin Fowler que contiene un análisis detallado de una variedad de técnicas de acceso a datos. Léelo. Luego oblígales a todos a leerlo.

Trabajo hecho.

2

Si la interoperabilidad es/será una preocupación más adelante, DataSet definitivamente no es la dirección correcta para entrar. PUEDE exponer DataSets/DataTables sobre un servicio, pero si DEBERÍA o es discutible. Si está hablando de .NET -> .NET probablemente esté bien, de lo contrario va a tener un desarrollador cliente muy infeliz del otro lado de la valla consumiendo su servicio

0

data-centric significa menos complejidad de código.

objetos personalizados significa potencialmente cientos de objetos adicionales para organizar, mantener y en general vivir. También va a ser un poco más rápido.

Creo que es realmente una cuestión de complejidad de código frente a rendimiento, que puede ser respondida por las necesidades de su aplicación.

0

Comience pequeño. ¿Hay alguna aplicación de utilidad que pueda usar para ilustrar su punto?

Por ejemplo, en un lugar donde trabajaba, la aplicación principal tenía un proceso de construcción complicada, que consiste en cambiar los archivos de configuración, la instalación de un servicio, etc.

Así que escribí una aplicación para automatizar el proceso de generación. Tenía una interfaz de usuario de WinForms rudimentaria. Pero dado que nos estábamos moviendo hacia WPF, lo cambié a una interfaz de usuario de WPF, manteniendo la interfaz de usuario de WinForms también, gracias a Model-View-Presenter. Para aquellos que no estaban familiarizados con Model-View-Presenter, era un ejemplo fácilmente comprensible al que podían referirse.

De manera similar, busque algo pequeño donde pueda mostrarles cómo se vería una aplicación que no sea DataSet sin tener que realizar una gran inversión de desarrollo.

+0

Dicho todo eso, Toran, no necesariamente estoy de acuerdo con tu premisa. Ahora, si usan DataSets sin tipo, con una tonelada de literales feos en todas partes, entonces sí, cualquier cosa sería mejor. Pero los DataSets tipeados son una buena tecnología sólida de acceso a datos. Si uno los prefiere o un mapeador O/R es una cuestión de estilo. No intentes forzarlos a tu estilo; no funcionará Cree un ejemplo y permítales ver si hay beneficios claros. –

Cuestiones relacionadas