Pergunta

Eu fui um programador ruim porque eu estou fazendo um copiar e colar. Um exemplo é que sempre que eu conectar a um banco de dados e recuperar um conjunto de registros, vou copiar o código anterior e editar, copiar o código que define o DataGridView e editar. Estou ciente da reutilização de código frase, mas eu realmente não tenho usado ele. Como posso utilizar a reutilização de código para que eu não tenho que copiar e colar o código de banco de dados eo código datagridview.,

Foi útil?

Solução

Dependendo do tamanho do projeto pode alterar a resposta.

Para um menor projeto que eu recomendaria a criação de uma classe DatabaseHelper que faz todo o acesso a sua DB. Seria apenas uma abertura de invólucro em torno de / fechar conexões e execução do código DB. Em seguida, em um nível mais alto que você pode apenas escrever os DBCommands que serão executados.

Uma técnica similar pode ser usado para um projeto maior, mas seria necessário algum trabalho adicional, as interfaces precisam ser adicionados, DI, bem como abstrair o que você precisa saber sobre o banco de dados.

Você também pode tentar olhar para ORM, DAAB, ou para o Padrões e Práticas Grupo

Com relação a como para evitar que o ole C & P? - Bem, como você escrever seu código, você precisa rever periodicamente, se você tem blocos semelhantes de código, que só variam de acordo com um parâmetro ou dois, que é sempre um bom candidato para refatoração em seu próprio método

.

Agora, para o meu exemplo de código pseudo:

Function GetCustomer(ID) as Customer
   Dim CMD as New DBCmd("SQL or Stored Proc")
   CMD.Paramaters.Add("CustID",DBType,Length).Value = ID
   Dim DHelper as New DatabaseHelper
   DR = DHelper.GetReader(CMD)
   Dim RtnCust as New Customer(Dx)
   Return RtnCust
End Function

Class DataHelper
  Public Function GetDataTable(cmd) as DataTable
    Write the DB access code stuff here.
    GetConnectionString
    OpenConnection
    Do DB Operation
    Close Connection
  End Function
  Public Function GetDataReader(cmd) as DataReader
  Public Function GetDataSet(cmd) as DataSet
  ... And So on ...
End Class

Outras dicas

A essência da reutilização de código é tomar uma operação comum e parametrizar-lo para que ele possa aceitar uma variedade de entradas.

Tome humilde printf, por exemplo. Imagine se você não tem printf, e só write teve, ou algo similar:

//convert theInt to a string and write it out.
char c[24];
itoa(theInt, c, 10);
puts(c);

Agora, isso é uma merda ter que escrever cada vez, e é realmente tipo de buggy. Então, algum programador inteligente decidiu que estava cansado disso e escreveu uma função melhor, que em um caiu swoop material de impressão na saída padrão.

printf("%d", theInt);

Você não precisa ficar tão chique como printf com seus argumentos variádicos e string de formato. Mesmo apenas uma rotina simples, tais como:

void print_int(int theInt)
{
    char c[24];
    itoa(theInt, c, 10);
    puts(c);
}

faria o truque nickely. Dessa forma, se você quiser mudar print_int para sempre imprimir para stderr você pode atualizá-lo para ser:

void print_int(int theInt)
{
    fprintf(stderr, "%d", theInt);
}

e todos os seus números inteiros que agora magicamente ser impresso para o erro padrão.

Você pode até mesmo, em seguida, agrupar essa função e outros que você escrever em uma biblioteca, que é apenas uma coleção de código que você pode carregar no seu programa.

Seguindo a prática de reutilização de código é por isso que você ainda tem um banco de dados para conectar-se:. Alguém criou um código para armazenar registros em disco, refeito lo até que ele era utilizável por outros, e decidiu chamá-lo de um banco de dados

Bibliotecas não aparecem magicamente. Eles são criados por programadores para facilitar suas vidas e permitir que eles trabalhem mais rápido.

Coloque o código em uma rotina e chamar a rotina sempre que você quer que o código a ser executado.

Confira Martin Fowler livro em refatoração , ou alguns dos inúmeros recursos da internet relacionados refatoração (também em stackoverflow), para descobrir como você poderia melhorar código que tem cheiro de duplicação.

Em primeiro lugar, criar uma biblioteca com funções reutilizáveis. Eles podem ser ligados a diferentes aplicações. Ele economiza muito tempo e incentiva a reutilização.

Não se esqueça também a biblioteca é unidade testada e documentada. Por isso, é muito fácil encontrar o direito classe / função / variável / constante.

boa regra de ouro é se você usar mesma peça três vezes, e é, obviamente, possível generalizar, do que torná-lo um procedimento / função / biblioteca.

No entanto, como eu estou ficando mais velho, e também mais experiente como um desenvolvedor profissional, estou mais inclinado para ver a reutilização de código, como nem sempre a melhor idéia, por duas razões:

  1. É difícil prever as necessidades futuras, por isso é muito difícil de definir APIs para que você realmente usá-los na próxima vez. Pode custar-lhe o dobro do tempo - uma vez que você torná-lo mais geral apenas para que segunda vez que você está indo para reescrevê-lo de qualquer maneira. Parece-me que, especialmente projetos Java de tarde são propensos a isso, eles parecem estar sempre reescrito no quadro du jour, apenas para ser mais "fácil de integrar" ou qualquer outra coisa no futuro.

  2. Em uma organização maior (Eu sou um membro de um), se você tem que confiar em alguma equipe externa (seja em casa ou 3rd party), você pode ter um problema. Seu futuro, então depende de seu financiamento e seus recursos. Por isso, pode ser um grande fardo para usar o código estrangeiro ou biblioteca. De forma semelhante, se você compartilhar um pedaço de código para alguma outra equipe, eles podem esperar que você vai mantê-lo.

Nota no entanto, estes são mais como razões de negócios, portanto, em código aberto, é quase sempre uma coisa boa para ser reutilizável.

para obter reutilização de código que você precisa para se tornar um mestre de ...

  1. dar nome as coisas que captura sua essência. Este é realmente muito importante
  2. Certificar-se de que ele só faz uma coisa. Isto é realmente volta ao primeiro ponto, se você não pode nomeá-lo por sua essência, então muitas vezes o seu fazer muito.
  3. Localizando a coisa em algum lugar lógico. Novamente, isto volta a ser capaz de nomear as coisas bem e capturar sua essência ...
  4. Agrupando-lo com as coisas que se baseiam em um conceito central. Igual ao anterior, mas disse differntly: -)

A primeira coisa a notar é que, usando copiar e colar, você está reutilização de código - embora não da maneira mais eficiente. Você ter reconhecido uma situação onde você tem chegar a uma solução previamente.

Existem dois âmbitos principais que você precisa estar ciente de quando se pensa em reutilização de código. Em primeiro lugar, a reutilização de código dentro de um projeto e, por outro, a reutilização de código entre os projetos.

O fato de que você tem um pedaço de código que você pode copiar e colar dentro de um projeto deve ser um sinal de que o pedaço de código que você está olhando é outro lugar útil. Essa é a hora de fazê-lo em uma função, e disponibilizá-lo dentro do projeto. Idealmente, você deve substituir todas as ocorrências desse código com sua nova função, de modo que ele (a) reduz código redundante e (b) assegura que todos os erros em que pedaço de código só precisam ser corrigidos em uma função em vez de muitos.

O segundo âmbito, a reutilização de código entre projetos, requer um pouco mais de organização para obter o máximo benefício. Esta questão tem sido abordada em um par de outros SO perguntas por exemplo. aqui e here .

Um bom começo é organizar o código que é susceptível de ser reutilizado em projetos em arquivos de origem que são tão auto-suficiente quanto possível. Minimizar a quantidade de apoio, de projeto específico, o código que é necessário, pois isso fará com que seja mais fácil de reutilizar arquivos inteiros em um novo projeto. Isto significa minimizando o uso de tipos de dados específicos do projeto, minimizando as variáveis ??globais utilização projecto específicas, etc.

Isso pode significar a criação de arquivos de serviços públicos que contêm funções que você sabe estão indo para ser útil em seu ambiente. por exemplo. funções de banco de dados comum, se você muitas vezes desenvolvem projetos que dependem de bancos de dados.

Eu acho que a melhor maneira de responder o seu problema é que criar um conjunto separado para as suas importantes funções .. desta forma você pode criar métodos de extensão ou modificar o ajudante montar si .. pense desta função ..

ExportToExcel (data List, corda filename)

este método pode ser usado para as suas futuras funções de exportação excel então por que não armazená-lo em seu próprio ajudante de montagem .. i desta forma basta adicionar referência a estes conjuntos.

Para o exemplo que você dá, a solução adequada é escrever uma função que recebe como parâmetros o que é que você editar sempre que você cole o bloco, em seguida, chamar essa função com os dados apropriados como parâmetros.

Tente e adquira o hábito de usar funções e bibliotecas de outras pessoas.

Você encontrará geralmente que o seu problema particular tem uma solução bem testada, elegante.

Mesmo que as soluções que encontram não são um ajuste perfeito, você provavelmente vai ganhar um monte de insights sobre o problema por ver como outras pessoas lidaram com ele.

Eu vou fazer isso em dois níveis. Em primeiro lugar dentro de uma classe ou namespace, colocar esse código de peça que é reutilizada nesse âmbito em um método separado e verifique se ele está sendo chamado.

Em segundo lugar é algo semelhante ao caso que você está descrevendo. Isso é um bom candidato para ser colocado em uma biblioteca ou uma classe auxiliar / utilitário que pode ser reutilizado de forma mais ampla.

É importante avaliar tudo o que você está fazendo com uma perspectiva se pode ser disponibilizada para os outros para reutilização. Esta deve ser uma abordagem fundamental para a programação que a maioria de nós não percebem.

Note que qualquer coisa que é para ser reutilizado precisa ser documentado em mais detalhes. Sua convenção de nomenclatura seja distinta, todos os parâmetros, os resultados de retorno e quaisquer restrições / limitações / pré-requisitos que são necessários devem ser claramente documentados (em arquivos de código ou de ajuda).

Depende um pouco sobre o que a programação idioma que você está usando. Na maioria dos idiomas que você pode

  1. Escreva uma função, parametrizar-lo para permitir variações
  2. Escrever um objeto de função, com os membros para armazenar os dados variados
  3. Desenvolver uma hierarquia de (objeto de função?) Classes que implementam mesmo variações mais complicadas
  4. Em C ++ você também pode desenvolver modelos para gerar as várias funções ou classes em tempo de compilação

fácil: sempre que você se pegar código de copiar-colar, retire-o imediatamente (ou seja, não fazê-lo depois que você já CP'd código várias vezes) em uma nova função.

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