¿Qué es el software obstinado?

200

A menudo veo personas que dicen que cierto software es "muy obstinado" o que Microsoft tiende a escribir marcos "no obstinados". ¿Qué significa esto realmente?

zvolkov
fuente

Respuestas:

206

Si un marco es obstinado, lo bloquea o lo guía en su forma de hacer las cosas.

Por ejemplo: algunas personas creen que un sistema de plantillas no debería proporcionar acceso a métodos y funciones definidos por el usuario, ya que deja el sistema abierto para devolver HTML sin formato. Por lo tanto, un desarrollador de marcos obstinado solo permite el acceso a las estructuras de datos. Por diseño, el software es limitante y alienta al diseñador a hacer las cosas a su manera.

Otro ejemplo ( tomado del enlace de señales ) es el de wiki . Los diseñadores de wiki tenían muchas opiniones. Pensaban que HTML era demasiado complicado para que la gente lo escribiera, por lo que se les ocurrió lo que sentían que era una forma más natural de actualizar el contenido. También lo despojaron del diseño elegante porque sentían que el enfoque debería estar más en el contenido que en el diseño.

Apple tiene fuertes opiniones cuando diseña sus productos.

El diseño de software sin opiniones es más parecido a PERL / PHP. Permite al desarrollador y confía en el desarrollador para tomar las decisiones correctas y pone más control en sus manos.

También colocaría a Microsoft en la columna no obstinada. Un buen ejemplo de un marco de Microsoft, que es un-opininated: .NET. Al abrir el CLR y las especificaciones, lo abrió a todo tipo de lenguajes y estilos de implementaciones.

cgp
fuente
18
No diría "te bloquea", más bien no hace que sea fácil desviarse del camino "dorado". El camino dorado suele ser la mejor práctica, algo que debería funcionar para la mayoría de las personas la mayor parte del tiempo.
dpan
55
Estoy de acuerdo en que las cerraduras son un poco fuertes, pero eliminaría esa connotación negativa al señalar cuán exitosos son muchos productos obstinados.
cgp
32
Bueno, es obvio que esta respuesta es obstinada;)
dpan
66
Un marco obstinado es uno que está diseñado de tal manera que sus usuarios experimentarán la menor frustración con ese marco cuando el marco se use de una manera que no viole las suposiciones hechas por el diseñador del marco.
Crippledsmurf
2
Estoy de acuerdo con altCognito. .NET alienta al desarrollador a mezclar Model y View en las aplicaciones WinForms al hacer que sea extremadamente fácil poner la lógica de negocios en los métodos generados por el evento de clic del botón, por ejemplo. De esta manera, Microsoft alienta indirectamente a los desarrolladores miopes a bloquear su código en sus marcos. Un diseño más limpio impondría o alentaría mejores prácticas, como forzar el método de hacer clic en el botón para llamar a una segunda función con lógica Modelo, en un módulo separado. No es que no se pueda lograr un diseño limpio en .NET, simplemente no se recomienda de forma predeterminada.
Jared Updike
62

El software con opiniones significa que básicamente hay una manera (la forma correcta ™) de hacer las cosas y tratar de hacerlo de manera diferente será difícil y frustrante. Por otro lado, hacer las cosas de la manera correcta ™ puede facilitar el desarrollo con el software, ya que se reduce la cantidad de decisiones que debe tomar y aumenta la capacidad de los diseñadores de software para concentrarse en hacer que el software funcione. El software con opiniones puede ser excelente para usar, si se hace bien, si su problema se adapta bien a la solución. Puede ser un verdadero dolor resolver aquellas partes de su problema que no se asignan a las herramientas proporcionadas. Un ejemplo aquí sería Ruby on Rails.

El software no obstinado, por otro lado, deja mucha flexibilidad al usuario (desarrollador). No proscribe un método para resolver un problema, pero proporciona herramientas flexibles que se pueden usar para resolver el problema de muchas maneras. La desventaja de esto puede ser que debido a que las herramientas son tan flexibles, puede ser relativamente difícil desarrollar cualquier solución. Es posible que el usuario (desarrollador) tenga que codificar mucho más la solución porque el marco no proporciona suficiente ayuda. También tiene que pensar mucho más sobre cómo proporcionar una solución y los desarrolladores mediocres pueden terminar con soluciones más pobres que si hubieran comprado algún software obstinado. PERL es probablemente el ejemplo clásico de software no obstinado.

Mi ideal es un marco no obstinado, pero con convenciones fuertes. Pondría ASP.NET MVC en esta categoría. En realidad, todo el software es obstinado hasta cierto punto (aunque quizás no sea PERL). MVC tiene convenciones fuertes en su elección de modelo, pero ofrece muchas formas diferentes de resolver problemas dentro de esas convenciones. Algunas de esas formas pueden incluso romper el modelo. Sin embargo, si se usa correctamente, de acuerdo con las convenciones que se desarrollan en dicho marco, puede ser una verdadera alegría.

tvanfosson
fuente
22

Básicamente es un software que funciona de la forma en que sus autores piensan que debería funcionar, en lugar de tratar de complacer a todos. Eso significa que a mucha gente no le gustará, pero a los que sí les va a encantar.

Rails es probablemente el ejemplo canónico de un marco obstinado: haces las cosas a su manera, y todo es sencillo. Si no lo haces, te dolerá un poco. Pero está bien: si no quieres hacer las cosas a su manera, no quieres usar Rails.

Rytmis
fuente
1
Estoy de acuerdo con esto ... Tengo un software de opinión ... y es porque es mi pequeño proyecto favorito ... No tenía idea de que sería ampliamente adoptado ... a algunos les encanta, otros se quejan ... pero todos entienden que es mi proyecto
favorito
8

En aras del equilibrio, proporcionaré una descripción (bastante obstinada) que sea más favorable al enfoque obstinado (en contraste con algunas de las otras respuestas).

Los marcos de opinión proporcionan un "camino de oro", que se supone que es la mejor práctica para la mayoría de las personas y la mayoría de los escenarios (a los ojos de los autores).

Sin embargo, esto no necesariamente significa bloqueo. Significa que puede requerir un esfuerzo extra para hacer las cosas de manera diferente.

Los marcos menos obstinados brindan una variedad de opciones diferentes y le deja a usted decidir.

Los marcos de opinión habitualmente eliminan la carga del desarrollador para reinventar la rueda o repensar el mismo problema una y otra vez y, por lo tanto, ayudan a centrarse en el problema real en cuestión.

En el mundo de código abierto, puede encontrar muchos marcos obstinados pero competitivos, por lo que todavía tiene una opción. Solo tienes que elegir tu propio camino dorado.

dpan
fuente
1
+1, se siente como si mencionaras aplicaciones empresariales. Siebel tiene un camino dorado que no se rompe fácilmente, aunque se puede hacer y trabajé en un equipo que lo hizo ocasionalmente. Puede hacer que el desarrollo avance más rápido, ya que no tiene que desarrollar elementos de interfaz de usuario, almacenamiento de datos y lógica empresarial todo el tiempo.
J. Polfer
5

El software de opinión está construido y diseñado de tal manera que facilita hacer las cosas de cierta manera. Favorece ciertos patrones de diseño más que otros. En el proceso, es difícil desviarse del estilo de desarrollo de software para el que fue desarrollado. Otra forma de decirlo es que favorece la "Convención sobre la configuración". es decir, las opciones de configuración son muy limitadas ya que el software asume muchos de los aspectos de configuración. El software con opiniones generalmente es más rápido de dominar una vez que se entienden los supuestos.

Por otro lado, el software no pionero hace pocas suposiciones. Y como resultado, los marcos de desarrollo de software / software que no son opinados suelen tener muchas opciones de configuración. Un desarrollador generalmente tiene que tomar muchas decisiones con respecto a varios aspectos del software. A menudo, se desarrollan diversas herramientas para facilitar el manejo de estas enormes opciones. por ejemplo, Visual Studio .NET para .NET, Eclipse IDE para Java, etc. El software sin espino suele tardar más en dominar que el software con opiniones.

Kunal
fuente
5

tl; dr :

  • Opinión : por ejemplo, Ruby on Rails . Hay una forma particularmente preferida de hacer las cosas, y obtienes mucho apoyo para hacer las cosas de esa manera. Hacer las cosas de otra manera es difícil, o para algunos sistemas imposibles (me viene a la mente Cassandra).
  • Sin opiniones : por ejemplo, Perl 5 . Puedes hacer lo que quieras, como quieras, en cualquier estilo. Todos los estilos son igualmente abiertos, válidos y compatibles.
00prometeo
fuente
3

Mucha gente hace referencia a ASP.NET MVC como un marco "no opinado", y solo quería opinar con un par de ideas al respecto.

Es cierto que ASP.NET MVC no exige demasiado; puede usar cualquier solución de persistencia que desee, ya sea Linq-to-SQL, ADO.NET Entities, NHibernate, etc.

Por otro lado, el marco MVC tiende a favorecer la "convención sobre la configuración", para citar a Phil Haack, que sugiere seguir el patrón predefinido para localizar controladores, vistas, modelos y otro código. Aunque puede alterar este comportamiento, es más fácil nadar con la corriente, y para la mayoría de las personas, no hay problema para hacerlo.

También alrededor de ASP.NET MVC hay muchas personas obstinadas, lo que creo que lleva a muchos tutoriales sesgados que insisten en cubrir, por ejemplo, pruebas unitarias e inyección de dependencia; Estoy a favor de las buenas pruebas y la separación de las preocupaciones, pero sí percibo que tales temas se presionan un poco, a menudo antes de cubrir conceptos básicos más útiles.

Una vez más, debo admitir que dentro de esas áreas, el marco en sí está completamente abierto a adoptar cualquier solución de prueba de unidad que desee, así como cualquier inyección de dependencia y marcos de burla que desee usar, por lo que supongo que eso proporciona otro ejemplo de flexibilidad, incluso dentro del "ataque bíblico" de las pruebas unitarias, etc.

Robar
fuente
2

Es la cantidad de convenciones implementadas en un marco y el número de decisiones que se han tomado.

Si, por ejemplo, hay 5 (o más) formas diferentes de enviar datos de formulario a una acción del controlador (que es el caso en ASP.NET MVC), el marco parece ser bastante "poco obstinado": la decisión está pendiente ¡para ti!

Sin embargo, si el marco permite (ya sea inhabilitando directamente otras formas o alentándolo fuertemente) solo una forma de hacer eso (que es el caso con Fubu MVC), se podría decir que la decisión ha sido tomada por el marco , haciendo que el marco sea obstinado.

mookid8000
fuente
1

El ejemplo que verá mucho en este momento es el framework ASP.NET MVC. Es increíblemente extensible, pero esa es su caída en algunos aspectos, no tiene nada de carne. ¿Quieres hacer acceso a datos? Tendrás que escribir eso tú mismo. ¿Quieres algo de AJAX? Ídem.

Sin embargo, como es altamente extensible, si se basa en él, puede convertirlo en un marco obstinado. Esto es lo que hacen los gustos de MVCContrib , te dan métodos específicos para hacer cosas, lo que significa que tienes que escribir menos código.

Esto significa que si quiere romper con la opinión, a menudo hay más trabajo por hacer que si estuviera trabajando en la versión estándar. Sin embargo, este es un escenario 80/20. Si elige correctamente su marco de opinión, solo querrá romper con las opiniones el 20% del tiempo y será altamente productivo el otro 80% del tiempo.

Garry Shutler
fuente
ASP.NET MVC parece encajar naturalmente con el marco ASP.NET AJAX e incluso incluye adiciones específicas de MVC a esa biblioteca, por lo que no estoy de acuerdo con que la elección de la implementación de Ajax sea completamente imparcial. Además, la biblioteca no exige específicamente ni recomienda el uso de jQuery, pero lo agrupa, haciendo gestos furtivos en esa dirección mientras dice "mira esto".
Rob