2009-04-29 19 views
175

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

+0

En [programadores.se]: [¿Qué significa realmente 'software obstinado'?] (Http://programmers.stackexchange.com/q/12182/63183) – unor

Respuesta

181

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

Por ejemplo: algunas personas creen que un sistema de plantilla no debe proporcionar acceso a los métodos y funciones definidos por el usuario, ya que deja el sistema abierto para devolver el HTML sin procesar. Entonces, un desarrollador de framework obstinado solo permite el acceso a estructuras de datos. Por diseño, el software limita y alienta al diseñador a hacer las cosas a su manera.

Otro ejemplo (taken from the signals link) es el de wiki. Los diseñadores de wiki tuvieron muchas opiniones. Pensaron que el HTML era demasiado complicado para que las personas escribieran, 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 sofisticado porque sentían que el enfoque debería ser más en el contenido que en el diseño.

Apple tiene buenas opiniones cuando diseña sus productos.

diseño de software dogmático-Un es más como Perl/PHP. Permite al desarrollador y confía en que el desarrollador tome las decisiones correctas y tenga 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 no tiene ninguna opinión: .NET. Al abrir el CLR y las especificaciones, lo abrió a todo tipo de idiomas y estilos de implementaciones.

+15

No diría "te encierra" , más bien no hace que sea fácil divergir 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

+5

Estoy de acuerdo con que las cerraduras son un poco fuertes, pero eliminaría esa connotación negativa al notar cuán exitosos son muchos productos obstinados. – cgp

+27

Bueno, es obvio que esta respuesta es obstinada;) – dpan

21

Básicamente es un software que funciona de la manera 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 lo hagan les encantará.

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

+1

Estoy de acuerdo con esto ... Tengo una pieza de software con opinión ... y se opinó 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 – TimothyP

2

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

Si, por ejemplo, hay 5 (o más) maneras diferentes de enviar datos de formulario a una acción de controlador (como es el caso en ASP.NET MVC), el marco parece ser bastante "no-obstinado" - ¡La decisión es tuya!

Si, sin embargo, el marco habilita (ya sea mediante la desactivación directa de otras formas o alentándolo fuertemente) solo una forma de hacerlo (como es el caso de Fubu MVC), puede decir que la decisión ha sido tomada tomado por el marco, haciendo así que el marco sea obstinado.

53

El software Opinionated significa que hay básicamente una forma (forma correcta ™) de hacer cosas y tratar de hacerlo de otra manera será difícil y frustrante. Por otro lado, hacer las cosas forma correcta ™ puede hacer que sea muy fácil desarrollar con el software ya que se reduce el número de decisiones que debe tomar y la capacidad de los diseñadores de software para concentrarse en hacer que el software funcione aumentado. El software Opinionated puede ser ideal para usar, si se hace bien, si su problema se asigna a la solución de manera adecuada. Puede ser un verdadero dolor resolver aquellas partes de su problema que no se asignan a las herramientas provistas.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 a mano mucha más de 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 un software obstinado. PERL es probablemente el ejemplo clásico de software no obstinado.

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

+0

Subiendo esta respuesta porque explica las fuerzas detrás del fenómeno. –

1

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

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

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

+0

ASP.NET MVC parece encajar naturalmente con el marco AJAX de ASP.NET, 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 totalmente imparcial. Además, la biblioteca no ordena ni recomienda específicamente el uso de jQuery, pero lo agrupa, gesticulando furtivamente en esa dirección mientras pronuncia "mire esto". – Rob

6

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

Las estructuras de opinión proporcionan un "camino dorado", 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 significa necesariamente el bloqueo. Significa que puede requerir un esfuerzo adicional para hacer las cosas de manera diferente.

Los marcos menos obstinados brindan una serie de opciones diferentes y dejan que usted decida.

Los frameworks de opinión generalmente eliminan la carga del desarrollador para reinventar la rueda o replantear el mismo problema una y otra vez y así ayudar a enfocarse en el problema real en cuestión.

En el mundo del código abierto, puede encontrar muchos frameworks que compiten entre sí, por lo que aún tiene una opción. Solo tienes que elegir tu propio camino dorado.

+1

+1, se siente como las aplicaciones empresariales que mencionas. Siebel tiene un camino dorado que no se rompe fácilmente, aunque se puede hacer y trabajé en un equipo que ocasionalmente lo hacía. Puede hacer que el desarrollo avance más rápido ya que no tiene que desarrollar elementos de IU, almacenamiento de datos y lógica de negocios todo el tiempo. –

3

Mucha gente hace referencia a ASP.NET MVC como un marco "no optimizado", 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, Entidades ADO.NET, 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 en gran medida seguir el patrón predefinido para ubicar controladores, vistas, modelos y otros códigos. 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 mucha gente obstinada, lo cual me lleva a muchos tutoriales parciales que insisten en cubrir, p. pruebas unitarias e inyección de dependencia; Estoy a favor de las pruebas y la separación de las preocupaciones, pero percibo que esos temas son un poco pesados, a menudo antes de cubrir aspectos básicos más útiles.

De nuevo, debo admitir que dentro de esas áreas, el marco está completamente abierto a la adopción de cualquier solución de prueba de unidad que desee, así como cualquier inyección de dependencia y marcos de burla que quiera usar, así que supongo proporciona otro ejemplo de flexibilidad, incluso dentro del "ataque bíblico" de las pruebas unitarias, etc. que parece estar sucediendo.

4

El software Opinionated está construido y diseñado de tal manera que hace que sea fácil hacer las cosas de cierta manera. Favorece ciertos patrones de diseño más que otros. En el proceso, hace que sea difícil desviarse del estilo de desarrollo de software para el que se desarrolló. Otra forma de expresarlo 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 Opinionated generalmente es más rápido de dominar una vez que se comprenden las suposiciones.

El software no pivotado, por otro lado, hace pocas suposiciones. Y como resultado, los softwares/frameworks de desarrollo de software que no están optimizados a menudo tienden a tener muchas opciones de configuración. Un desarrollador generalmente tiene que tomar muchas decisiones sobre diversos aspectos del software. A menudo, se desarrollan varias herramientas para facilitar el tratamiento de estas enormes opciones. p.ej. Visual Studio .NET para .NET, Eclipse IDE para Java, etc. El software sin apresurar suele tardar más en dominar que el software obstinado.

2

tl; dr:

  • Opinionated: por ejemplo, Ruby on Rails. Hay una manera particularmente preferida de hacer las cosas, y recibes mucho apoyo para hacer las cosas de esa manera. Hacer las cosas de otra manera es difícil, o imposible para algunos sistemas (me viene a la mente Casandra).
  • No obstinado: p. Perl 5. Puedes hacer lo que quieras, de la forma que quieras, en cualquier estilo. Todos los estilos son igualmente abiertos, válidos y compatibles.
Cuestiones relacionadas