Pergunta

Qualquer código pode ser reutilizado de uma forma ou de uma outra, pelo menos se você modificar o código. código aleatório não é muito reutilizável como tal. Quando eu li alguns livros, eles costumam dizer que você deve fazer explicitamente a reutilizáveis ??de código, tendo em conta outras situações de uso de código também. Mas certo código não deve ser um onipotente todos fazendo classe também.

Eu gostaria de ter código reutilizável que eu não tenho que mudar mais tarde. Como você faz reutilizáveis ??de código? Quais são os requisitos para o código ser reutilizável? Quais são as coisas que o código reutilizável deve definitivamente têm e que as coisas são opcionais?

Foi útil?

Solução

10 dicas sobre como escrever código reutilizável por alguma ajuda.

  1. Mantenha o DRY código. via seca "Do not Repeat Yourself".
  2. Faça uma classe / método fazer apenas uma coisa.
  3. testes de unidade de gravação para suas aulas e torná-lo fácil de classes de teste.
  4. Remova a lógica de negócios ou código principal longe de qualquer código do framework
  5. Tente pensar de forma mais abstrata e usar Interfaces e classes abstratas.
  6. Código de extensão. Escrever código que pode ser facilmente estendido no futuro.
  7. Do código não escrita que não é necessário.
  8. Tente reduzir o acoplamento.
  9. Seja mais Modular
  10. Escrever código como seu código é uma API externa

Outras dicas

Se você tomar a abordagem test-driven development, em seguida, o código só se torna reutilizável como seu refactor baseado em futuros cenários.

Pessoalmente acho constantemente refatoração produz um código mais limpo do que tentar-adivinhar o que cenários eu preciso código de uma classe particular de.

Mais do que qualquer outra coisa, manutenção torna reutilizável código.

Reutilização raramente é um objetivo de valor em si mesmo. Pelo contrário, é um subproduto de escrever código que é bem estruturada, de fácil manutenção e útil.

Se você se propôs a fazer códigos reutilizáveis, muitas vezes você se encontra tentando levar em conta as exigências de comportamento que possam ser necessárias em projetos futuros. Não importa quão bom você se torna com isso, você vai achar que você tem esses requisitos à prova de futuro errado.

Por outro lado, se você começar com os requisitos nuas do projeto atual, você vai achar que seu código pode ser limpo e apertado e elegante. Quando você está trabalhando em outro projeto que precisa de uma funcionalidade semelhante, você naturalmente irá adaptar o seu código original.

Eu sugiro olhar para as melhores práticas para o seu escolhido linguagem de programação / paradigma (ex. Padrões e sólida para Java / C tipos #), a literatura de programação de Lean / Agile, e (é claro), o livro "Code Complete". Compreender as vantagens e desvantagens destas abordagens irá melhorar a sua prática de codificação sem fim. Todo o seu código se tornará então reausable -., Mas 'por acidente', ao invés de projeto

Além disso, veja aqui: Escrita Código Sustentável

Para a maioria das definições de "reutilização", a reutilização de código é um mito, pelo menos na minha experiência. você pode dizer que tenho algumas cicatrizes deste? :-)

Por reutilização, eu não tomada média arquivos de origem existentes e batendo-los em sua apresentação até que um novo componente ou serviço cai. Quero dizer, tomando um componente ou serviço específico e reutilizá-lo sem alteração.

Eu acho que o primeiro passo é obter-se em uma mentalidade que vai demorar pelo menos 3 iterações para criar um componente reutilizável. Por 3? Porque a primeira vez que você tentar reutilizar um componente, você sempre descobrir algo que ele não consegue lidar. Então você tem que mudá-lo. Isso acontece algumas vezes, até que finalmente você tem um componente que, pelo menos, parece ser reutilizável.

A outra abordagem é fazer um projeto caro-olhando para a frente. Mas então o custo é tudo up-front, e os benefícios (podem) aparecer algum tempo na estrada. Se o seu chefe insiste que o cronograma do projeto atual sempre domina, então esta abordagem não vai funcionar.

Você vai escrever vários módulos (partes), ao escrever uma relativamente grande projeto. código reutilizável em meios de prática você terá criar bibliotecas que outros projetos que necessitam essa mesma funcionalidade pode usar.

Então, você tem que identificar módulos que podem ser reutilizados, para que

  1. Identificar a competência central de cada módulo. Por exemplo, se seu projeto tem para compactar arquivos, você terá um módulo que irá lidar com compactação de arquivos. não torná-lo fazer mais do que UMA COISA . Uma coisa única.

  2. Escrever uma biblioteca (ou classe) que irá lidar com compactação de arquivos, sem precisar de nada mais do que o arquivo a ser compactado, a saída e o formato de compressão. Isto irá separar o módulo do resto do projeto, permitindo que ele seja (re) utilizado em um ambiente diferente.

  3. Você não tem que ficar perfeito pela primeira vez, quando você realmente reutilizar a biblioteca você provavelmente vai descobrir falhas no projeto (por exemplo, você não fazê-lo o suficiente modular para ser capaz de adicionar novos formatos de compressão facilmente) e você pode corrigi-los pela segunda vez e melhorar a reutilização do seu módulo. Quanto mais você reutilizá-lo (e corrigir as falhas), mais fácil se tornará a reutilização.

A coisa mais importante a considerar é a dissociação, se você escrever fortemente acoplados a reutilização do código é a primeira vítima.

Deixe todo o estado necessário ou contexto fora da biblioteca. Adicionar métodos para especificar o estado para a biblioteca.

Objeto-orientação permite que você refatorar código em superclasses. Este é talvez o tipo mais fácil, mais barata e mais eficaz de reutilização. herança de classe ordinária não requer um monte de pensar sobre "outras situações"; você não tem que construir código "onipotente".

simples herança Beyond, reutilização é algo que você encontrar mais do que você inventar. Você encontra situações de reutilização quando você quiser reutilizar um de seus próprios pacotes para resolver um problema ligeiramente diferente. Quando você quiser reutilizar um pacote que não se encaixa precisamente a nova situação, você tem duas escolhas.

  1. Copiar-lo e corrigi-lo. Você agora tem que pacotes quase semelhantes -. um erro caro

  2. Faça o reutilizável embalagem original em duas situações.

Apenas fazer isso para reutilização. Nada mais. Pensar muito sobre reutilização "potencial" e indefinido "outras situações" pode tornar-se um desperdício de tempo.

Outros mencionaram essas táticas, mas aqui eles são formalmente. Estes três vai chegar muito longe:

  • Aderir ao Individual de Responsabilidade Princípio - ele garante a sua classe só "faz uma coisa", o que significa que é mais provável será reutilizável para outro aplicativo que inclui a mesma coisa
  • .
  • Aderir ao Liskov Substituição Princípio -. Assegura o seu código "faz o que é suposto, sem surpresas", o que significa que é mais provável será reutilizável para outro aplicativo que precisa a mesma coisa feito
  • Aderir ao Abrir / Princípio Closed - garante o seu código pode ser feita se comportar de forma diferente, sem alterar sua fonte, o que significa que é mais provável que seja reutilizável, sem modificação direta.

Para adicionar ao acima itens mencionados, eu diria:

  • Faça essas funções genérico que você precisa para reutilização
  • arquivos de configuração usar e tornar o código usa as propriedades definidas em arquivos / db
  • Claramente fator seu código em tais funções / classes que os fornecem funcionalidades independentes e podem ser utilizados em diferentes cenários e definir os cenários que utilizam os arquivos de configuração

Gostaria de acrescentar o conceito de "composição de classe sobre herança de classe" (que é derivado de outras respostas aqui). Dessa forma, o objeto "composto" não se preocupa com a estrutura interna do objeto depende de - apenas o seu comportamento, o que leva a melhor encapsulamento e manutenção mais fácil (testando, menos detalhes para se preocupar). Em linguagens como C # e Java muitas vezes é crucial, já que não há herança múltipla por isso ajuda evitando o inferno gráfico de herança u pode ter.

Como mencionado, o código modular é mais reutilizável de código não-modular.

Uma forma de ajudar no sentido de código modular é a utilização de encapsulamento, consulte teoria encapsulamento aqui: http://www.edmundkirwan.com/

Ed.

Evite reinventar a roda. É isso aí. E que por si só tem muitos benefícios mencionados acima. Se você precisa mudar alguma coisa, então você acabou de criar um outro pedaço de código, uma outra classe, outra constante, biblioteca, etc ... ele ajuda você eo resto dos desenvolvedores que trabalham na mesma aplicação.

Comentário, em detalhes , tudo o que parece que pode ser confuso quando você voltar ao código da próxima vez. Excessivamente detalhado comentários podem ser um pouco irritante, mas eles são muito melhor do que comentários esparsos, e pode economizar horas de tentando descobrir WTF você estava fazendo última vez.

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