A reutilização é um recurso do bom design de software .
A reutilização é um glossário aceitável ("breve notação do significado") para um bom design de software? Por quê?
A reutilização é um recurso do bom design de software .
A reutilização é um glossário aceitável ("breve notação do significado") para um bom design de software? Por quê?
Respostas:
A reutilização é um indicador de bom design. Isso indica que o acoplamento do sistema está frouxo o suficiente e a coesão de uma unidade específica é alta o suficiente para facilitar a reutilização sem ocorrer problemas de dependência ou ter que reescrever a maior parte do código.
A reutilização é em grande parte uma ilusão. É comprovadamente impossível medir a "capacidade de reutilização" de uma unidade sem saber com antecedência onde ou como será usada. Muitos desenvolvedores tentarão projetar componentes "reutilizáveis" e frequentemente descobrirão mais tarde que os aspectos específicos que eles tentaram tornar "flexíveis" são exatamente os que não precisavam ser.
Eu usaria um "gloss" diferente: testabilidade.
Agora não sou um defensor do TDD, nem sinto a necessidade de testar a unidade de tudo e qualquer coisa. Mas escrever testes para um componente fornecerá uma idéia muito boa de suas características de acoplamento / coesão e muito rapidamente. Se isso depende de abstrações, isso é um acoplamento frouxo; você achará fácil zombar das dependências e isso sugere um bom design. Se ele tiver um objetivo claro (consulte também o Princípio da responsabilidade única ), seu comportamento será relativamente intuitivo, e você descobrirá com facilidade o que testar, o que novamente sugere um bom design.
Obviamente, isso não garante um bom design; a implementação real ou mesmo toda a arquitetura pode ser totalmente inadequada para o propósito declarado. Mas pelo menos ele diz que você não está trabalhando com código de espaguete ou com Deus Objects.
Por favor, não tente adivinhar a "reutilização" de um componente, especialmente para não usá-lo como evidência de "bom design". Isso é algo que você só pode estabelecer em retrospectiva, uma vez que realmente é reutilizado, e então o design pode ter mudado significativamente.
Não.
A reutilização é um bom recurso, pois pode acelerar o desenvolvimento futuro. (Embora, na prática, poucas organizações vejam o desenvolvimento futuro acelerado quase tanto quanto esperavam.) No entanto, qualquer parte significativa do software possui partes específicas para esse aplicativo. Além disso, quando pessoas sem experiência no domínio tentam escrever software reutilizável, geralmente ofuscam essa peça e reduzem o desempenho sem realmente conseguir torná-lo reutilizável.
Portanto, um bom design é modular e reutilizável somente onde você pode ver que a peça pode ser reutilizada e onde você possui o conhecimento necessário para obter a reutilização. Em outros lugares, você deve tentar limpar as coisas, mas não se preocupe com a reutilização. (Exceto na parte de trás da sua cabeça, onde você está fazendo anotações, para que em algum sistema futuro você tenha uma idéia de como fazer isso reutilizável.)
Acredito (e essa é minha crença pessoal) que a relação entre reutilização e bom design não é reflexiva; portanto, a resposta básica e simples é não . Se você estiver interessado em alguns bons guias de design, consulte este artigo da Wikipedia.
Um bom design de software deve ser reutilizável, pelo menos em algumas partes principais, acho que muito poucas pessoas fazem uma reutilização real do código-fonte, devido ao fato de ser extremamente complexo projetar o núcleo de um sistema para ser reutilizável em muitos contextos diferentes (E eu estou dizendo isso por experiência própria)
Considere uma classe com uma enorme quantidade de responsabilidades (também conhecida como Blob) executando todas as tarefas necessárias, mas sem qualquer tipo de consideração de design, talvez você já tenha visto o caso. A maioria das pessoas com uma classe assim usaria repetidamente e acho que teremos que concordar que é reutilização, reutilização sem design.
Espero não ter estragado muito minhas explicações
Penso que um melhor indicador de bom design é a adesão a idéias fundamentais, como o princípio da responsabilidade única e a manutenção da coesão de cada componente. Usando abstrações com uma interface limpa e concisa e mantendo a conformidade com o Principal de Substituição de Liskov , incentivamos a reutilização, sem tentar prever o que será ou não reutilizado.
A adesão a esses princípios fundamentais de design facilita o teste e a reutilização do código .
Bom design == bom design, a reutilização é um subproduto.
A reutilização geralmente é um objetivo implícito do projeto. Se você pode criar um componente ou um design inteiro, de forma que possa ser reutilizado posteriormente, parece óbvio que você deve fazer isso. O que nem sempre é óbvio é que pode levar muito tempo e esforço (e dinheiro) para tornar algo reutilizável, e o benefício da reutilização deve, portanto, ser ponderado em relação ao seu custo.
Um design reutilizável que custa duas vezes mais e / ou leva o dobro do tempo para construir do que o que o cliente precisa não é um bom design da perspectiva do cliente, principalmente se o cliente não precisar de reutilização.
Há vários atributos semelhantes que geralmente são considerados objetivos implícitos de design, porque parecem obviamente bons:
minimizando o custo
minimizando o tempo de desenvolvimento
minimizando a complexidade
maximizando a confiabilidade
Essas coisas são objetivamente boas, mas nem sempre são importantes para um cliente em particular em um determinado momento; portanto, é importante entender completamente o que seu cliente precisa (mesmo que esse cliente seja apenas seu chefe). Existem vários aforismos que nos lembram esse fato (por exemplo, "Feito é melhor que perfeito" e "Bom, barato, rápido: escolha dois"), mas ainda é fácil cair na armadilha de tentar crie um software que seja ótimo em todos os aspectos, quando, na verdade, nem sempre é necessário.
Para chegar à pergunta do título, então: Não , reutilização não é sinônimo de bom design. A reutilização pode ser um componente útil de um bom design específico, mas somente quando necessário.
Não necessariamente. Se você tornar algo reutilizável que claramente nunca será reutilizado, será um projeto ruim.
Por exemplo, se você estiver gravando um arquivo cheio de dados exclusivos da sua empresa e esses dados forem importados uma vez para outro lugar, por que se preocupar em torná-los reutilizáveis?
Dito isto, se sua estrutura ainda não tiver uma, o código para gravar em um arquivo pode precisar ser reutilizável. Isso seria um bom design.
Eu diria que não, principalmente porque descreve apenas um pequeno segmento de código. Descobri que, onde a usabilidade é mais importante, está no cerne e nas bordas externas do território da concessionária, não muito no meio. Vou dar alguns exemplos de coisas em que acho que a reutilização é uma métrica útil do design de qualidade.
Material principal
Material Utilitário
Para o material CRUD que ocupa de 70 a 80% da maioria dos aplicativos, não acho que a reutilização seja uma métrica valiosa.