Aquí podría ser tu PUBLICIDAD


Subsonic Vs NHibernate

votos
72

¿Cuál es el consenso sobre cuándo usar una de estas herramientas perjudicada para la otra? Considero que Subsonic es muy útil en términos de hacer las cosas rápidamente, pero en proyectos grandes no tiende a escalar, y vincula su modelo de dominio a su modelo de base de datos. Ahí es donde aparece Nhibernate, ya que le da POCO livianas que no están relacionadas con su modelo de base de datos, pero el tiempo de configuración es mucho más largo.

Publicado el 04/08/2008 a las 17:29
fuente por usuario Dan
En otros idiomas...        العربية       

15 respuestas

votos
83

Me hacen mucho esta pregunta y realmente todo se reduce a lo que quieres tocar. No puedo decirles cuán dañinos han sido los comentarios de Chris Cyvas sobre el escalamiento RE SubSonic, y he estado respondiendo a estos desde :(.

El acuerdo es - perf-wise, SubSonic escalas muy bien. En términos de crecimiento del proyecto, CUALQUIER herramienta que use requerirá su atención. Incluso NHibernate.

Escribí una publicación sobre cómo usar el patrón Repository con DI (como lo haría con NHIb o cualquier herramienta para ese asunto) con SubSonic 2.1:

http://blog.wekeroad.com/blog/subsonic-writing-decoupled-testable-code-with-subsonic-2-1/

También escribí una publicación sobre el rendimiento de SubSOnic:

http://blog.wekeroad.com/blog/subsonic-scaling/

Espero que esto ayude.

Respondida el 12/09/2008 a las 10:54
fuente por usuario user1151


Aquí podría ser tu PUBLICIDAD


votos
45

Yo recomendaría SubSonic si su proyecto funciona con la vista ActiveRecord de que la base de datos es su modelo. Obtendrás una clase por mesa y todo funciona mágicamente. Por supuesto, puede modificar y anular las cosas, pero si usted (o su proyecto) está fundamentalmente en desacuerdo con el enfoque de clase por tabla, examinaría NHibernate ya que comienza con el enfoque más complejo (pero más flexible) de mapeo de su modelo de dominio a su base de datos.

Si está usando una base de datos relativamente simple que está bajo su control (como en, puede cambiar columnas sin enviar ocho formularios a una junta de revisión de supervisión de división de bases de datos), recomendaría comenzar con SubSonic y mudarse a NHibernate si SubSonic no lo hace satisfacer sus necesidades.

Respondida el 06/08/2008 a las 10:47
fuente por usuario Jon Galloway

votos
31

Por lo que vale ... He tenido la oportunidad de utilizar ambas tecnologías bastante más desde que hice esta pregunta. Y tengo que quedarme, y si estas tecnologías eliges importa muy poco. Seguro NHibernate permite que las entidades comerciales estén un poco menos acopladas a la estructura de su base de datos, pero todavía encuentro que hay muchas ocasiones en las que todavía tiene que ceñirse a la voluntad de la base de datos.

En mi opinión, la única forma verdadera de separar por completo su Modelo de Dominio de su modelo de Base de Datos es escribir su propio DTOS (esencialmente POCO para pasar datos), y luego asignarlos a su ORM de elección en su capa de datos. Pero en la mayoría de los casos, este enfoque me resultará más complicado de lo que vale.

Respondida el 05/03/2009 a las 10:23
fuente por usuario Dan

votos
13

Un poco fuera de tema, pero en una línea similar. ¿Ha mirado Castle ActiveRecord está escrito sobre NHibernate y elimina la necesidad de perder tiempo creando mapeos XML desde el código a la base de datos. Al igual que NHibernate, puede estructurar los objetos de su dominio como desee y luego generar un esquema de base de datos a partir de esta estructura.

Usando ActiveWriter , una herramienta contribuida, puede mapear fácilmente desde su base de datos a objetos de dominio.

Respondida el 05/08/2008 a las 06:07
fuente por usuario FryHard

votos
9

Puede considerar buscar en Fluent NHibernate; hace que gestionar NHibernate sea muy sencillo. No estoy seguro de lo difícil que sería hacer la transición de un esquema existente, pero si está creando una nueva aplicación, es bueno definir el modelo de dominio y generar la base de datos en prácticamente cualquier servidor de base de datos que se pueda imaginar. Al leer los otros comentarios aquí, creo que Fluent NHibernate trae a NHibernate a la par con SubSonic para facilitar la configuración.

Respondida el 04/03/2009 a las 09:17
fuente por usuario Jereme

votos
7

Yo escribí un post recientemente sobre ORM .NET que tiene subsónico en ella, y ActiveRecord. Según mi experiencia, depende de lo que esté haciendo el proyecto. Subsonic funciona mucho mejor si proviene de un fondo SQL, pero NHibernate tiene más información sobre él. ActiveRecord es bueno para proyectos más pequeños, no estoy seguro de que sea más rápido para proyectos más grandes que seguir con NHibernate.

Respondida el 07/10/2008 a las 11:10
fuente por usuario Chris S

votos
7

No puedo dar una buena comparación ya que aún no he usado NHibernate en un proyecto, pero he usado SubSonic y he estado muy contento con él. Hasta ahora, no he topado con ningún obstáculo importante al usarlo.

Echa un vistazo a esta publicación de Rob Conery, uno de los creadores de SubSonic. Habla sobre cómo desacoplar su código SubSonic del resto de la aplicación. Incluso menciona el hecho de que esta arquitectura le permitirá cambiar posteriormente SubSonic por otra capa de acceso a datos como NHibernate o LINQ to SQL.

Sé que en realidad no respondí tu pregunta, pero espero que esto aún ayude.

Respondida el 04/09/2008 a las 08:25
fuente por usuario Michael Paladino

votos
5

He evaluado ambos y creo que no sería justo recomendar uno sobre el otro sin entender cuáles son sus objetivos. En su pregunta, usted expresó bien las diferencias y creo que ese debe ser su factor decisivo. Personalmente, he usado ambos y continuaré usando ambos dependiendo del proyecto.

  • NHibernate es mi elección para proyectos de mayor escala debido a sus usos de POCO livianos. Si alguna vez cambiara mi ORM "Creo", sería mucho más fácil refactorizar.
  • SubSonic es mi elección cuando tengo un proyecto de menor escala. Creo que el rendimiento sabio SubSonic escalas bien. Sin embargo, me siento estrechamente unido a él porque está tan grabado en mi proyecto. En proyectos más pequeños, aún puedo desactivarlo porque la base de códigos es muy pequeña y realmente me ayuda a extraer el código como se anuncia.
Respondida el 26/01/2009 a las 02:37
fuente por usuario Jamey McElveen

votos
4

De nuevo, un poco fuera de tema, pero reemplazaré a Castle ActiveRecord : en lugar de usar la base de datos como modelo (enfoque subsónico) o pasar horas en spaghetti XML (enfoque NHibernate) simplemente coloca atributos en sus clases modelo.

Incluso puede obtener ActiveRecord para generar el esquema de la base de datos por usted.

Hemos utilizado este enfoque en bastantes proyectos ahora y los beneficios son los siguientes:

  • Sencilla ruta de actualización a NHibernate si es necesario en el futuro
  • Soporte para modelos de herencia simple , ej. Coche -> Vehículo
  • El esquema que genera es muy probable que lo haya creado de todos modos, por lo que puede dedicar más tiempo a crear la aplicación en lugar de preocuparse por mantener el modelo / base de datos sincronizados.
Respondida el 16/09/2008 a las 01:15
fuente por usuario BigJump

votos
4

Creo que casi lo has logrado. Subsonic genera código, por lo que sus objetos comerciales reflejarán la estructura de su base de datos. nHibernate utiliza archivos de mapeo que asignan sus objetos comerciales a la base de datos para que sus objetos se puedan estructurar de la forma que desee.

¿Qué tan grande de un proyecto es esto? ¿Se necesitará apoyo a largo plazo? ¿La rentabilidad de Subsonic va a compensar cualquier posible problema de escalado?

Respondida el 04/08/2008 a las 06:12
fuente por usuario Bob

votos
3

Considere el tamaño de su equipo y proyecto cuando considere ActiveRecord.

En mi experiencia, ActiveRecord es una abstracción sobre NHibernate que comienza a filtrarse como un colador cuando se intentan escenarios más complicados.

Si tiene un esquema de moderado a muy complicado o no directo, quédese con NHibernate. Puede cortarlo y cortarlo hasta casi la perfección.

El otro lugar donde puede meterse en problemas es cuando necesita una consulta medianamente complicada. ActiveRecord esconde mucha implementación de NHibernate ... pero la necesitará para una consulta complicada, que será muy difícil si no está familiarizado con HQL. Tenga cuidado con los miembros del equipo que no solo piratean los bordes en lugar de aprender NHibernate y HQL.

Respondida el 02/10/2008 a las 08:26
fuente por usuario ignu

votos
3

Estamos bootstrapped con subsónico y ahora estamos tratando de evaluar si vamos a cambiar a nhibernate ahora que estamos en los puntos de dolor de subsónicos.

Nuestra otra opción es crear un terreno intermedio donde usemos el subsónico para consultar y cargar objetos arbitrarios con su funcionalidad de "ejecutar como lista de tipos" que hace un mapeo basado en el nombre de una declaración arbitraria sql style sql. O para tratar de recrear algo en nhibernate y refactorizar el resto.

Así que digo que el subsónico tiene sentido en aplicaciones pequeñas, pero el mantenimiento en aplicaciones subsónicas se vuelve bastante peludo, tenemos tiempos especialmente difíciles con la superposición del código de validación y pre / post en eventos activados por código. Para un patrón de registro activo, subsónico es definitivamente 80% allí, pero hace algunas cosas de manera escabiosa, y le impide tener un control real sobre su jerarquía de herencia, ya que cada clase debe heredar una tabla para volver a esa tabla.

Respondida el 30/08/2008 a las 07:18
fuente por usuario DevelopingChris

votos
2

Creo que debes apegarte a uno que puedas utilizar de la mejor manera. El objetivo final es la productividad y un código de calidad de buen rendimiento. Si conoces SubSonic dentro y fuera, apégate a él y si conoces NHibernate en profundidad, adhiérete a NHibernate. Esta es una pregunta muy subjetiva. También debe considerar el hecho de que los miembros de su equipo tienen experiencia. Si eres bueno en eso, podrás mantenerlo fácilmente.

He visto proyectos grandes usando SubSonic mientras que NHibernate ya es famoso y se usa ampliamente.

La decisión de elegir ORM no depende únicamente del ORM.

Respondida el 03/11/2009 a las 06:52
fuente por usuario this. __curious_geek

votos
2

¡Acepta la desigualdad de impedancia!

mira esto

:)

O no. Si quieres rendimiento, hazlo tú mismo. Si lo quiere rápido y fácil, vaya con NHibernate y ActiveRecord. Si te gusta simular que realmente sabes lo que está sucediendo en el nivel de acceso a los datos, utiliza NHibernate y siéntate con XML todo el día para hacer funcionar muchos a muchos ... O simplemente ... err ... hazlo tú mismo - ADO.Net ¡FTW!

Respondida el 08/02/2009 a las 02:51
fuente por usuario Qerim Shahini

votos
0

El consejo que he recibido sobre el tema es que Subsonic no escala para manejar escenarios más complejos, por lo que si sigues ese camino terminarás con un trabajo que intenta cambiar a un ORM más avanzado.

Por lo tanto, estoy más interesado en usar NHibernate para casos complejos, Castle Active Record para casos más simples y estoy atento a Fluent NHibernate, que debería hacer que el mapeo NHibernate sea mucho más fácil (especialmente una vez que se mejore el soporte de mapas basado en convenciones).

Respondida el 25/10/2008 a las 03:20
fuente por usuario Colin Jack


Aquí podría ser tu PUBLICIDAD