Ne PHP uygulama tasarım / tasarım kalıpları kullanabilirim?

9 Cevap php

Benimle PHP kullanmak için favori uygulama tasarım / tasarım desenleri paylaşın lütfen. Ben bilmek istiyorum bazı şeyler:

  • Lütfen klasörler nasıl tasarlandığı
  • Eğer PHP uygulamalarında nesne oritentation kullanmak nasıl
  • Eğer CRUD, sayfalama, veya herhangi bir diğer ortak görevleri ile ilgili standart bir yol var mı?
  • Nasıl tekrarlayan kodu kullanarak önlemek mi? Kütüphaneler / paylaşım ortak kod için yaklaşım, vb nedir?
  • Eğer kod daha şık hale hangi yolları nelerdir?

Siz tüm bu cevap vermek zorunda değilsiniz, herhangi bir ya da bu birkaç yanıtlayan yararlı olacaktır.

PHP tekrarlayan, çirkin kod yazma çok yoruldum ve ben programlama kolaylaştırmak ve beni zorlu / iş görevlere odaklanmak izin olacak benim freelance projeler için küçük bir çerçeve yapmak istiyorum çünkü bu soruyorum nedeni, ziyade form doğrulama, sayfalama, ve PHP programlama işinin% 80'ini oluşturan diğer sıradan faaliyetler

Tüm görüşler takdir!

9 Cevap

Bunun için aşağı oy alabilirsiniz, ama gerçekten kendi çerçeve yazmak istiyorsun, ben sana deneyimlerinden çok şey öğreneceksiniz, çünkü bunun için gitmek demek. Burada bahsedilen diğer çerçeveler büyük ve test edilmiş ve bunları kullanarak kötü bir karar olmaz, ama bu sizin seçiminiz.

Şey, farklı yapardınız eğer çerçeve yazmaya başlamadan önce, (kendi sözdizimi, dizin yapısına adlandırma şeması, tasarım desenleri, vb) diğer çerçeveler bakmak ve yaptıklarını neden yaptığını anlamaya çalışın ve ne. Birkaç öğreticiler denemek ve kendi kodu ile oynamak, bir kaç örnek uygulamalar yapmak. Bu yaptıktan sonra, bunları kullanarak sevmiyorum, eğer, o zaman devam edin ve sizin çerçeve planlama ne amele tutmak değil, ne yaptığını geliştirmeye başlayabilirsiniz.

Kendi rulo karar verirseniz, burada benim kendi deneyimlerinden tavsiye ederim bir kaç şey vardır:

  • Make Security Your Top Priority - If you write a data access layer, use bound parameters. If you write a form class, guard against CSRF and XSS. Catch your exceptions and handle your errors. Make sure that your PHP environment is secure. Don't try coming up with your own encryption algorithm. If you don't concentrate on security, it's not worth writing your own framework.
  • Comment Your Code - You will need comments to help you remember how your code works after a while. I usually find that docblock comments are more than enough. Beyond that, comment why you did something, not what you did. If you need to explain what, you may want to refactor.
  • Single Responsibility Classes and Methods - Most of your classes and methods should do one thing and only one thing. Especially watch out for this with the database - Your pagination class shouldn't rely on your data access object, nor should almost any other (low-level) class.
  • Unit Test - If each of your methods does only one thing, it should be far easier to test them and it will result in better code. Write the test first, then the code to pass the test. This will also give you greater freedom to refactor later on without breaking something.
  • Abstract Similar Classes - If you have more than one class that does similar things, create a parent class that uses the similarities between the classes and extend it.
  • Delegate and Modularize - If you're writing a validation system (and chances are you probably would), don't include each validator as a method in some super validation class. Separate them into individual classes and call them as needed. This can be applied in many areas: filters, languages, algorithms, validators, and so on.
  • Protect and Privatize - In most cases, it's better to use getter and setter methods rather than allowing direct access to class variables.
  • Consistent API - If you have a render() method and a draw() method that do the same things in different classes, pick one and go with it across all classes. Keep the order of the parameters the same for methods that use the same parameters. A consistent API is an easier API.
  • Remember Autoloading - The class names can get a little clunky and long, but the way Zend names the classes and organizes the directories makes autoloading a lot easier. Update: As of PHP 5.3, you should begin using namespaces.
  • Never echo or print anything - Give it as a return value and let the user decide if it should be echoed. A lot of times you'll use the return value as a parameter for another method.
  • Don't Try to Solve the World's Problems - Solve your own first. If you don't need a feature right now, like a class for localizing numbers or dates or currency, don't write it. Wait until you need it.
  • Don't Preoptimize - Build a few simple applications with your framework before fine tuning it. Otherwise, you can spend a lot of time on nothing productive.
  • Use Source Control - If you spend countless hours creating a masterpiece, don't risk it getting lost.

Ben yukarıdaki posterleri ile anlaşmak zorunda. PHP programlama yaparken bir çerçeve kullanarak değilseniz gerçekten arkanızda bağlı elinizle programlama ediyoruz. Ben şahsen tavsiye CodeIgniter. Bu öğrenmek çok kolay ve çok aktif bir topluluk vardır, etrafında hızlı bir çerçevedir. Tüm sorularınızın çerçevesinde tarafından cevap verilecektir:

* How your folders are designed

CodeIgniter (ya da bu konuda herhangi bir çerçeve) görünümleri, modelleri, ve denetleyiciler, kendi klasör ile her içine mantığı ayırır.

* Do you have a standard way of dealing with CRUD, pagination, or any other common tasks?

CI pagination kütüphanesi var ve bu bir nesne yönelimli bir şekilde (ORM) da CRUD aramaları sarılması için DataMapper gibi 3. parti kütüphaneleri vardır.

* What are ways in which you can make your code more elegant?

Modeli, görünüm ve denetleyici ayrılması çok şık kodunu yapmak.

(Çerçeve kullanırken ben cevap vermedi 2 soru hemen hemen ima edilir)

-> Usul / inline-kodu -> muhtemelen çiftleşmiş bir bakalım -> OOP -> sonra bir çerçeve küçük bir komut: php geliştiriciler bir çok mayın benzer bir yol izlemiştir düşünün. Ben güncel sürümü ile kullanılabilir özellikleri maç için tasarım desenleri öğrenme, PHP ile "büyümüş" olması için bir PHP geliştiricisi için oldukça yaygın olabilir düşünüyorum.

MVC günümüzde kullanılan popüler çerçevelerde en sık kullanılan tasarım modelidir. CakePHP benim seçim çerçevesi olmasına rağmen Symphony ve Zend de çok popüler olan - bir kaç iyi denemeye değer ve yakında hissediyorum hangi belirgin olacaksınız en rahat.

En projeler (hızlı gelişim ve taşınabilir kod önceliklerin nerede) Ben ancak hafif uygulamalar için, Kek kullanmak için (ben son zamanlarda geliştirilen bir Good Baad idi) düşük spec donanım (hızlı çalıştırmak isterim ) ve onun No Framework PHP MVC framework üzerine Rasmus Lerdorf makalesini okumanızı tavsiye ederim, büyük çerçevelerin biri işlevselliği tarafından eklenen toplu / ağırlık gerekmez.

Temelde güzel kod teşvik eder ve iyi tasarım uygulamaları PHP her zaman Ruby, Python ve C # seviyor kaybetmek gidiyor gerçek bir nesne yönelimli dile sonra eğer. Fakat, PHP, yani kendi güçleri vardır Bir çiftleşmiş dil (öyle olduğunu) gerek yok, PHP çok hızlı koşar ve ucuza ve tüm uygulamalar için geniş bir çerçeve ağırlığı gerekmez.

Ben MVC gibi bir tasarım deseni yönetilebilirlik alır ve PHP'nin güçlü ile birleştiren bir tasarım modeli benimseyerek öneririm.

Ben neredeyse bir bozuk plak gibi hissediyorum, ama iki nedenden dolayı ortak çerçeveler bazı bakmak öneririm:

  1. Birini kullanmamayı tercih bile, bazıları çok iyi yazılmış ve çok iyi tasarlanmış. Özellikle Zend Framework gibi ama ben bir saniye içinde geri geleceğiz.
  2. Eğer tekerleği yeniden icat ediyoruz, neden kendinize sorun. Eğer gerçekten başka aynı tasarım sorunları herkes sıfırdan bir şeyler yazmaya haklı (burada seçim insert çerçevesinde) arkasında toplumun çok daha iyi anlıyoruz karşıya olduğunu hissediyor musunuz? Başlangıçta çeşitli çerçeveler baktı ve onlar da bir öğrenme eğrisi çok ya da çok fazla yükü sunulan ve çok kendi geliştirdiği, çok büyük olduğuna karar biri olarak konuşan, ben eğer sıfırdan kendi yazılı büyük bir acı olduğunu söyleyebilirim sadece kolayca uzatılabilir varolan birini kullanabilirsiniz.

Kolayca uzatılabilir bir çerçeve kullanarak demişken, Zend Framework ile çok olumlu deneyimler yaşadım. Bu yapışkan ve henüz gevşek bağlı bir yapı mümkün hızlı ve kolayca mevcut bileşen ve tüm çerçeve onun genel işlevsellik eklemek için kendi yardımcı ve eklenti sınıflar yazmak gerekir fikri etrafında tasarlanmıştır genişletmek için yapar.

Ben Zend Framework ben parçası Zend Framework MVC olarak tek bir web sitesi çalıştırıyorum böylece tamamen esnek olması ve benim eski berbat bir çerçeve ve henüz yeniden kazanılmış değil hatta eski crappier kod parçası buldum. Aslında, çünkü bizim rewrite sırasında biz eski çerçeveyi kullanarak edilemeyecek yavaş koştu bir sayfa buldum, Zend Framework mimarisi altında çalıştırmak için tek bir sayfa açıldığında ettik.

Bazı sorularınızı yanıtlamak için, sana Martin Fowler tarafından Kurumsal Uygulama Mimarisi Modelleri içine bakmak tavsiye ederim. O uygulamanızda bir veritabanı etkileşimi katman yaratmak için ne gibi bu ortak sorunların bir dizi çözmek için nasıl içine değerli anlayışlar bir sürü sağlar. Fowler da MVC ve Ön Sayfa Kontrolörü gibi konuları kapsar.

Ben PHP metodoloji çoğu izah ettik here.

ancak günümüzde, ben sadece her yerde i can Django kullanın.

I ilk kodu ve html karıştırma yorgun aldığımda smarty çiftleşmiş motoru ile başladı. Bir süre korsanlık sonra, benim kendi çerçevesi yazma sadece iş çoğaltarak olduğunu fark etti.

Ben gerçekten bir CMS Joomla ile birkaç proje, yaptık ama müşteriler içeriği üzerinde kontrol bir sürü verir.

Sonuçta benim projeler için gerçek bir çerçeve kullanarak yerleşti ettik. Ben Raylar esinlenerek ve çok iyi belgelenmiş, ama duydum ki, symfony ile cakePHP ve ZendFramework da çok iyi değilim.

Ben Zend oldukça fazla klasör düzenini tanımlar Çerçeve ve OOP (MVC paradigma) kullanın. Böyle I Zend_Paginator, doğrulama için ben vs o I sayesinde Zend_Validate sınıfları kullanabilirsiniz (benim modeli sınıfları {[) (1]} uygulamak) kullanın, örneğin sayfalandırmada gibi ortak görevler için tamamen yerine tekerleği yeniden iş mantığına konsantre olabilirsiniz.

Zend Framework ve Doctrine kullanarak, benim klasör yapısı genellikle bu gibi görünüyor:

root
  app
    config         (db config, routing config, misc config)
    doctrine       (fixtures, migrations, generated stuff, etc)
    lib
    logs
    models         (doctrine models)
    modules        (zend mvc modules)
    bootstrap.php
  docs             (db diagrams, specs, coding standards, various docs)
  pub              (web root)
  tests
  tools            (console tools, i.e. doctrine-cli)
  vendor           (zend and doctrine libraries, preferably as svn-externals)

Ben şimdi bir süre için kendi şeyler yazma etrafında karıştırmasını oldum ve ben bir şey üzerinde takılıyorum çünkü her şey tam olarak bunu terbiye etrafında almak asla.

Ve sonra ben doğru bir şey yapıyorum olsun gerçekleşme gelmek kısım geliyor.

Zend: Ve gibi benim kendi yazma bir kişiyi favori ile devam vazgeçmiş.

Ben diğerlerine baktı ama Zend bir süre civarında olmuştur ve onların şeyler biliyor gibi görünüyor.

MVC Ayrıca ben şimdi yazmak şeyle ileriye gidiyorum yoludur.