kod okunamaz hale if-then-else çok olacak zaman Sakın-Tekrar-Yourself (DRY) ilkesine uymak için nasıl?

6 Cevap php

Ben Sakın-Yourself Tekrar ilkesi, ama HTML ve CSS ile birlikte PHP yazarken ben bile bazen, farklı durumlar için aynı kodu tekrar kullanmak, benim kod yakında olacak kadar çok uymak istiyorsanız- kodu kolayca sürdürülebilir olmadığını then-else.

Smarty, çiftleşmiş motoru kullanıldığı takdirde en kod editörü kadar maç olmayacak, çünkü bu, daha büyük bir sorun olabilir {if} {else} {/ if} Yani programcı görsel eşleşen etiketi için bakmak gerekir, ve kolay değil iç içe {if} {else} {/ if} 3 veya 4 düzeyleri olduğunda.

Bu durumda, KURU ayrılmamak için bir yol var, ama yine de iyi sıçramalı kodu var?

6 Cevap

Tam bir çerçevenin kısa, ne (o mantık varsa bile) içeriği için yapmak eğilimindedir separate it out dosyalarının içine ve onları bir araya birleştirme (onları cendereye) ve bu tarihten sonra çiftleşmiş mantığını değerlendirmek için başka bir mantıksal değerlendirme kullanmaktır söyledi. Bu içerik chunkifies ve ortak devlet yeniden / topakları paylaşılabilir hale getirir.

Bu şekilde her bir nihai şablon tamponu diske veya bir veritabanında saklayabilirsiniz ayrık yeniden kullanılabilir içerik Nuggets düzleştirilmiş ağaçtır. Hatta yerini küçük bir çözümleyici kadar basit bir şey:

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

shared_page_header.txt ayrı şeyler tutmanıza yardımcı olur. Ayrıca, hatta şablonları gömülü olduğu mantığı endişeleri ayrılığı bakmak için zorlar. Manageable, reusable chunks of anything (dynamic or not) her zaman gitmek için yoludur. Sizin şablonları kadar değerlendirilir sadece dizeler, yani shared components merged büyük-kirli-string (TM) içine ve sonra değerlendirilir gibi davranın.

Good Luck

Sadece bu yüzden size kod yazmak için kullandığınız ne program daha bilgi var ...?

Kendini tekrar değil için ipuçları:

Use some sort of templates. Bunu yaparsanız sayfaların her içeriği görüntülemek için kodunu tekrarlamak zorunda sizi tutar. I.E. Eğer 20 sayfalık bir site var ve size düzenini değiştirmeye karar verirseniz, size geçmesi ve daha sonra tüm sayfaları 20 değiştirmek zorunda istemiyorum.

Eğer belirli bir görevi yerine kod varsa Use functions., program / sayfa boyunca bu kod birden çok kez yazmak ETMEYİN. Bir işlev oluşturun ve sonra bu görev gerçekleştirilir gereken her noktada diyoruz. Eğer bir değişiklik yapmak gerekirse Bu şekilde sadece bir işlev değiştirebilir ve bu görevi yapılan her yerde bulmak için kod yoluyla aramak zorunda değilsiniz. Eğer sınıflar ve biliyorsanız gerektiği gibi gelecekteki projelerde sınıfı içerecek böylece birlikte veri kapsülleme sağlar ve grup ile ilgili işlevleri sağlar gibi yöntemler (bir yöntemi, bir sınıfta bir fonksiyondur), birçok görevler için, bu bile iyidir.

Eğer / else ifadeleri ve kod çok okunabilir değil varlık yapabileceğiniz birkaç şey vardır sürü zorluk yaşıyorsanız:

1. Consider trying a new editor. Kod katlama bir zorunluluktur. Bazı editörler de dikey çizgiler, bu vurgu var ve ne ile gider bilmek çok girintili kodunu maç. Eğer iyi ücretsiz editörü istiyorsanız (sadece ben burada bağlantılar ekleyebilir olamaz, google) hem de bu özelliklere sahip olarak, I + + Not Defteri'ni öneriyoruz.

2. There are techniques you can use to reduce the number of nested if statements that you have...

Örnek (Bu kodu):

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

: Ayrıca içine dümdüz olabilir

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;
}

Eğer / birinin iç içe 3 veya 4 düzeyleri var ve onları düzleştirmek istiyorsanız Yani, yukarıdaki gibi birden fazla argüman kullanmak için kodu daha okunaklı bulabilirsiniz. Bu sadece bunu yapmak hangi yol için bir tercih meselesi, aynı şeyi yapar.

Try and not mix your logic (I'm assuming PHP) and your display (I'm assuming HTML/CSS). Bu her zaman yapmak kolay değil, ama şablonları ve css kullanarak, bu mümkündür. Bana size bir karşılama mesajı olarak kullanıcıların adını görüntüleyen bir ana sayfada bunu nasıl pratik bir örnek vereyim.

Inline PHP (kaçınıyorum):

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

Mantık ekran (daha iyi) ayrı:

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

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

^ Sizin bakış (HTML) ayrı mantık tutulması proje gerçekten karmaşık almaya başlar bunalmış alamadım yardımcı olacaktır. Bu sadece karıştırmak için iyi değil! :)

İyi şanslar dostum!

Sorunuzun ilk cümlesi IMO, sorundur. Gerçekten görüntüsü (yani HTML ve CSS) ile kod karıştırma olmamalıdır. Bunu yapmak değil yardımcı olacak birkaç PHP MVC çerçeveler vardır. Zend çerçevesi oldukça iyi ama diğerleri de vardır.

Eğer bir çerçeve kullanmak istemiyorsanız, o zaman bu gibi bir kod kullanabilir ve arka uç nesneleri aramak değil sayfalarınızı üstlenmeden öneririm. Hızla kodu ve görünümü Karıştırma any dil, sadece PHP içinde unmaintainable olur.

Şimdi PHP kullanarak cepten kavramları uygulama ile tanıdık olabilir, ama eğer-else ifadeleri iç içe olanlar üstlenmeden ve iyi adlandırılmış işlevi onları yerleştirerek DRY prensibi ile uydurarak çok yardımcı olmayabilir. Ve üstelik, DRY prensibi ile yapışmasını kod sıçramalı yapmak yok.

Bize veya size ulaşmak için çalışıyoruz ne bağlı olarak yardımcı olmayabilir yanlış gidiyor, ancak bazı şeyleri işaret etmek için bir örnek komut dosyası ile bu çok daha kolay olacaktır:

  • Bir göz alarak alternative syntax for control structures. Bazı insanlar PHP sadece çıkış için hangi HTML bölümleri karar için kullanılan ile, özellikle HTML içeren dosyaları yazarken bu tarz kullanmayı tercih.

  • Yani sonradan dahil dosyaların içine kod tekrar bölümlerini bölmek. header.php, footer.php vb

  • Kod katlama destekleyen bir IDE kullanarak

İyi şanslar

Ifadeleri mantık ifadeleri olarak kabul edilir, onlar MVC ilkelerini ihlal gibi, onlar mümkün olduğunca görünümlerde kaçınılmalıdır.

Örneğin, yerine yardımcıları görüntülemek geçiş:

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';
    }
}

Bu kod yeniden kullanılabilir, test edilebilir, kodunuz kuru tutacak :)