como aderir ao princípio Don 't-Repita-Yourself (DRY), quando haverá muitos if-then-else tornando o código ilegível?

StackOverflow https://stackoverflow.com/questions/937225

Pergunta

Eu gostaria de aderir ao Don 't-Repita-Yourself princípio, mas às vezes quando eu escrever PHP em conjunto com HTML e CSS, se eu voltar a usar o mesmo código para diferentes situações, o meu código em breve terá tanto muitos if-then-else que o código não é de fácil manutenção.

Isso pode ser um problema maior se Smarty, o motor de templates é usado, porque editor mais código não irá corresponder-se {if} {else} {/ if} Assim, as necessidades programador de olhar para a etiqueta correspondente visualmente, e não é fácil quando há 3 ou 4 níveis de aninhado {if} {else} {/ if}.

Em tal situação, há uma maneira de furar a seco, mas ainda tem um bom código sustentável?

Foi útil?

Solução

curta de um quadro completo, o que tendem a fazer por conteúdo (mesmo que contém lógica) é separá-lo para fora em arquivos e utilizar outra avaliação lógica e fundi-las (mangle-los) e em seguida, avaliar a lógica templates depois disso. Este chunkifies seu conteúdo e faz pedaços sharable / reutilizável no estado comum.

Desta forma, cada buffer modelo final é uma árvore achatada de re-utilizáveis ??nuggets de conteúdo discretos que você pode armazenar em disco ou um banco de dados. Mesmo algo tão simples como um pequeno analisador que substitui:

<h1>{{insert:shared_page_header}}</h1>

Com shared_page_header.txt ajuda a manter as coisas separadas. É também o obriga a olhar para a separação de preocupações, mesmo na lógica que está incorporado em seus modelos. gerenciável, pedaços reutilizáveis ??de nada (dinâmico ou não) são sempre o caminho a percorrer. Seus modelos são apenas cordas até avaliadas, então tratá-los como componentes compartilhados fundiu em uma grande-sujo-string (TM) e, em seguida, avaliou.

Good Luck

Outras dicas

Apenas por isso temos mais informações ... Que programa você está usando para escrever o seu código?

Dicas para não repetir-se:

Use algum tipo de modelos. Fazer isso impede você de ter o código de repetição para a exibição de conteúdo em cada uma das suas páginas. OU SEJA Se você tem um site com 20 páginas e você decidir mudar seu layout, você não quer ter que passar e, em seguida, mudar todos os 20 de suas páginas.

Use as funções. Se você tem o código que executa uma tarefa específica, não escreva que o código várias vezes todo o seu programa / página. Criar uma função e, em seguida, chamá-lo em cada ponto onde você precisa que a tarefa realizada. Dessa forma, se você precisar fazer uma mudança que você acabou de modificar que uma função e não tem que pesquisar através de seu código para encontrar todos os lugares que você executou essa tarefa. Se você sabe sobre as classes e métodos (um método é uma função em uma classe), para muitas tarefas, este é ainda melhor, pois fornece-lhe com encapsulamento de dados e permite que você funções de grupo relacionadas juntos para que você pode incluir a classe no futuro projetos como necessário.

Se você está tendo dificuldade com lotes de if / else e código não ser muito legível existem algumas coisas que você pode fazer:

1. Considere tentar um novo editor. Código de dobragem é uma obrigação. Alguns editores também têm linhas verticais que realce e igualar-se código recuado para que você saiba o que se passa com o quê. Se você quer um editor livre decente, eu recomendaria Notepad ++, pois tem essas duas características (apenas google-lo, eu não posso adicionar links aqui).

2. Existem técnicas que você pode usar para reduzir o número de instruções IF aninhadas que você tem ...

Exemplo (este código):

if (item1 == true) {
   if (item2 == true) {
      item3 = 5;
   }
   else {
      item3 = 10;
   }
}
else {
   if (item2 == true) {
      item3 = 15;
   }
   else {
      item3 = 20;
   }
}

Também pode ser achatada em:

if (item1 == true && item2 == true) {
   item3 = 5;
}
else if (item1 == true && item2 == false) {
   item3 = 10;
}
else if (item1 == false && item2 == true) {
   item3 = 15;
}
else {
   item3 = 20;
}

Então, se você tem 3 ou 4 níveis de aninhados if / elses e você quer achatar-los, você pode encontrar seu código mais legível para usar vários argumentos como acima. Ele faz a mesma coisa, é apenas uma questão de preferência para o caminho que você fazê-lo.

Tentar e não misturar a sua lógica (estou assumindo PHP), e seu monitor (estou assumindo HTML / CSS). Isso nem sempre é fácil de fazer, mas usando modelos e css, é possível. Deixe-me dar um exemplo prático de como você pode fazer isso em uma home page que exibe um nome de usuários como uma mensagem de boas-vindas.

Inline PHP (tentar evitar):

<html>
   <body>
      <?php
      if ($logged_in == true) {
         echo "Welcome ",$user->name(),"!";
      }
      else {
         echo "Welcome Guest!";
      }
      ?>
   </body>
</html>

Logic separar do display (melhor):

<?php
if ($logged_in == true) {
   $greetingMessage = "Welcome ",$user->name(),"!";
}
else {
   $greetingMessage = "Welcome Guest!";
}
?>

<html>
   <body>
      <?php echo $greetingMessage; ?>
   </body>
</html>

^ Mantendo a sua lógica separado do seu ponto de vista (HTML) ajudará você a não ficar sobrecarregado quando seus começos do projeto ficando muito complexo. É melhor apenas não misturar! :)

Bom homem sorte!

A primeira frase da sua pergunta é o problema, IMO. Você realmente não deve ser misturar código com o seu ponto de vista (ou seja, HTML e CSS). Há diversas frameworks PHP MVC que irá ajudá-lo a não fazer isso. O Zend Framework é bastante decente, mas há outros também.

Se você não quiser usar um quadro, então eu sugiro refatoração suas páginas para não usar um código como este e objetos de chamada no back-end. Misturando seu código e ver rapidamente se torna insustentável no qualquer Idioma, e não apenas PHP.

Agora eu pode não ser tão familiarizado com a implementação de conceitos OOP usando PHP, mas refatoração essas aninhados if-else e colocando-os em uma função bem-nomeado ajuda muito em manter-se com o princípio de DRY. E, além disso, furando com o princípio de DRY faz a sua fácil manutenção de código.

Com um arquivo de script exemplo, seria muito mais fácil para nós para apontar onde você está indo mal, no entanto, algumas coisas que podem ou não podem ajudá-lo dependendo do que você está tentando alcançar:

  • Dando uma olhada sintaxe alternativa para o controle estruturas . Algumas pessoas preferem usar este estilo ao escrever arquivos que contêm principalmente HTML, com o PHP está sendo usado apenas para decidir seções que HTML para a saída.

  • Dividir as seções reutilizáveis ??de código em arquivos que você possa mais tarde incluem, por exemplo. header.php, footer.php etc.

  • Usando um IDE que suporta código de dobragem

Boa sorte

Se declarações são consideradas declarações de lógica, eles devem ser evitados em vista, tanto quanto possível, eles violam os princípios do MVC.

Mudar para a vista ajudantes em vez disso, por exemplo:

class LoggedUsernameHelper
{
    protected $user;

    public function __construct(SomeUserObject $user)
    {
        $this->user=$user;
    }

    public function __toString()
    {
        return $user->isLogged() ? sprintf('Welcome %s', $user->getUsername()) :
            'Welcome guest';
    }
}

Este código é reutilizável, testável, irá manter o seu código seco:)

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