Pergunta

Muitas vezes vejo as pessoas dizendo que um determinado software é "muito opinativo" ou que a Microsoft tende a escrever estruturas "opinativo-un". O que isso realmente significa?

Foi útil?

Solução

Se um quadro é opinativo, ele bloquear ou guias-lo em sua maneira de fazer as coisas.

Por exemplo: algumas pessoas acreditam que um sistema de template não deve fornecer acesso a métodos e funções definidas pelo usuário, uma vez que deixa o sistema aberto para retornar HTML puro. Portanto, um desenvolvedor de framework opinativo só permite o acesso a estruturas de dados. Pelo projeto, o software é limitante e incentiva o designer a fazer as coisas à sua maneira.

Outro exemplo ( a partir dos sinais ligar ) é a de wiki . Os designers de wiki tinha um monte de opiniões. Eles pensaram HTML era muito complicado para as pessoas a escrever, então eles vieram para cima com o que eles sentiam que era uma maneira mais natural para o conteúdo de atualização. Eles também despojado-lo de fantasia, porque eles sentiram o foco deveria ser mais no conteúdo do que design.

A Apple tem opiniões fortes quando se projeta seus produtos.

design de software Un-opinativo é mais como Perl / PHP. Ele permite que o desenvolvedor e confia no desenvolvedor para tomar as decisões corretas e coloca mais controle em suas mãos.

Eu também colocaria Microsoft na coluna não opinativo. Um bom exemplo de um quadro Microsoft que é opininated-un: .NET. Ao abrir o CLR e as especificações, ele abriu para todos os tipos de linguagens e estilos de implementações.

Outras dicas

meios de software opinativo que é basicamente uma forma (o caminho certo ™) para fazer as coisas e tentar fazê-lo de forma diferente será difícil e frustrante. Por outro lado, fazendo as coisas da maneira direito ™ pode torná-lo muito fácil de desenvolver com o software como o número de decisões que você tem que fazer é reduzida ea capacidade dos designers de software para se concentrar em fazer o trabalho de software é aumentada. software opinativo pode ser ótimo para usar, se bem feito, se o seu problema mapeia para a solução bem. Ele pode ser uma verdadeira dor para resolver as partes do seu problema que não mapeiam para as ferramentas fornecidas. Um exemplo aqui seria Ruby on Rails.

software

Não-opinativo, por outro lado, deixa muita flexibilidade para o usuário (desenvolvedor). Ele não proíbe um método de resolver um problema, mas fornece ferramentas flexíveis que podem ser usados ??para resolver o problema de muitas maneiras. A desvantagem desta situação pode ser que porque as ferramentas são tão flexíveis, pode ser relativamente difícil de desenvolver qualquer solução. Muito mais da solução pode ter que ser mão-codificado pelo usuário (desenvolvedor) porque a estrutura não fornece ajuda suficiente. Você também tem que pensar muito mais sobre como fornecer uma solução e desenvolvedores medíocres pode acabar com soluções mais pobres do que se tivessem comprado em alguns softwares opinativo. PERL é provavelmente o exemplo clássico de software não-opinativo.

O meu ideal é uma estrutura não-dogmático, mas um com convenções fortes. Eu colocaria ASP.NET MVC nesta categoria. Na realidade, todo o software é opinativo, em certa medida (embora talvez não PERL). MVC tem fortes convenções em sua escolha de modelo, mas oferece muitas maneiras diferentes para resolver problemas dentro dessas convenções. Algumas dessas formas pode até quebrar o modelo. Usado corretamente, no entanto, de acordo com as convenções em desenvolvimento no quadro de tal pode ser uma verdadeira alegria.

É basicamente um software que funciona da maneira que seus autores acho que deve funcionar, em vez de tentar agradar a todos. Isso significa que um monte de gente não vai gostar, mas os que fazem vai adorar.

Rails é provavelmente o exemplo canônico de um quadro opinativo: você faz as coisas à sua maneira, e tudo é suave. Se você não fizer isso, você está em alguma dor. Mas isso é OK - se você não quer fazer as coisas à sua maneira, você não quer usar Rails

.

Por causa do equilíbrio que irá fornecer uma descrição (em vez opinativo), que é mais favorável para a abordagem opinativo (em contraste com algumas das outras respostas).

estruturas opinativo fornecer um "caminho dourado", que é suposto ser a melhor prática para a maioria das pessoas ea maioria dos cenários (aos olhos dos autores).

Este, porém, não significa necessariamente lock-in. Isso significa que ele pode exigir algum esforço extra para fazer as coisas de forma diferente.

Menos opinativo estruturas fornecem um número de diferentes opções e deixá-la até você para decidir.

estruturas opinativo normalmente remover a carga de desenvolvedor para reinventar a roda ou repensar o mesmo problema de novo e de novo e, portanto, o foco ajuda no problema real na mão.

No mundo do open-source poderá encontrar diversos opinativo estruturas ainda concorrentes, então você ainda tem uma escolha. Você apenas tem que escolher o seu próprio caminho de ouro.

software

opinativo é construído e projetado de tal forma a que faz com que seja fácil de fazer as coisas de uma certa maneira. Favorece certos padrões de design mais do que outros. No processo torna-se difícil de se desviar do estilo de desenvolvimento de software para o qual foi desenvolvido. Outra maneira de colocá-lo é que ele favorece a "Convenção sobre configuração". isto é, as opções de configuração são muito limitados como o software assume muitos dos aspectos de configuração. software opinativo geralmente é mais rápido para dominar uma vez que os pressupostos são compreendidos.

software Unopinionated por outro lado faz algumas suposições. E, como resultado, os quadros softwares / desenvolvimento de software que são unopinionated muitas vezes tendem a ter um monte de opções de configuração. Um desenvolvedor geralmente tem que fazer um monte de decisões sobre vários aspectos do software. Muitas vezes, várias ferramentas são desenvolvidas de modo a tornar lidar com esses enormes opções mais fáceis. por exemplo. Visual Studio .NET para .NET, Eclipse IDE for Java etc. software Unopinionated normalmente leva mais tempo para dominar do que software opinativo.

tl; dr :

  • opinativo : por exemplo, Ruby on Rails . Há uma maneira particularmente preferido para fazer as coisas, e você terá um grande apoio em fazer as coisas dessa forma. Fazer as coisas de outras maneiras é difícil, ou para alguns sistemas impossíveis (Cassandra vem à mente).
  • Un-opinativo : por exemplo, Perl 5 . Você pode fazer o que quiser, como quiser, em qualquer estilo. Todos os estilos estão igualmente abertas, válido e suportado.

Um monte de pessoas estão fazendo referência ASP.NET MVC como um quadro "unopinionated", e eu só queria pesar com um par de pensamentos sobre isso.

É verdade que ASP.NET MVC não impõe muito; você pode usar qualquer solução de persistência você gosta, seja ele Linq-to-SQL, Entidades do ADO.NET, NHibernate, etc.

Por outro lado, o framework MVC que tendem a favorecer "Convenção sobre configuração", para citar Phil Haack, que fortemente sugere seguir o padrão pré-definido para a localização de controladores, pontos de vista, modelos e outros códigos. Embora você pode alterar esse comportamento, é mais fácil de nadar com a corrente, e para a maioria das pessoas, não há nenhum problema em fazer isso.

Além disso circundante ASP.NET MVC há um monte de pessoas opinativo, que eu acho leva a um monte de tutoriais tendenciosas que insistem em cobrir, por exemplo, teste de unidade de injecção e da dependência; Eu sou tudo para um bom teste e separação de interesses, mas eu percebo que esses tópicos são empurrou para baixo a garganta um pouco, muitas vezes à frente de cobre básico mais úteis.

Mais uma vez, eu tenho que admitir que dentro dessas áreas, o próprio quadro é completamente aberto à adopção de qualquer que seja a unidade de teste solução que você deseja, bem como tudo o que a injeção de dependência e zombando de quadros que deseja usar, então eu acho que fornece outro exemplo de flexibilidade, mesmo dentro do "ataque bíblia" dos testes de unidade, etc., que parece estar acontecendo.

É a quantidade de convenções implementadas em um framwork eo número de decisões que foram tomadas.

Se, por exemplo, existem 5 (ou mais) formas diferentes de enviar dados de formulário a uma ação do controlador (que é o caso em ASP.NET MVC), o quadro parece ser muito "un-opinativo" - o decisão é até você!

Se, no entanto, o quadro permite (através de desativação diretamente outras maneiras, ou encorajando fortemente) apenas uma maneira de fazer essa coisa (que é o caso de Fubu MVC), você poderia dizer que foi tomada a decisão pela estrutura, tornando o quadro opinativo.

O exemplo que você vai ver um monte no momento é o framework ASP.NET MVC. É incrivelmente extensível, mas que é a sua queda em alguns aspectos, não há qualquer carne para ele. Quer fazer o acesso aos dados? Você vai ter que escrever isso mesmo. Quer um pouco de AJAX acontecendo? Idem.

No entanto, como é altamente extensível, se você construir sobre ele você pode transformá-lo em um quadro opinativo. Isto é o que os gostos de MVCContrib do, eles dão-lhe métodos específicos de fazer as coisas que significa que você tem que escrever menos código.

Este significa que se você quiser romper com a opinião muitas vezes há mais trabalho a fazer do que se estivesse trabalhando na versão de baunilha. Este é um embora 80/20 cenário. Se você escolheu o seu quadro opinativo corretamente você só vai querer romper com as opiniões 20% do tempo e você vai ser altamente produtiva os outros 80% do tempo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top