PHP Multi-Tier .. doğru yolu?

7 Cevap php

Belirli bir soruyu, PHP Multi-Tier uygulamaları oluştururken her şeyin İş Mantığı katmanında yapılması var ... genel bir cevap kullanabilirsiniz, ya da herhangi bir katman işi yapabilir var ... Örnek, Lets say I 'sunum katmanı üzerindeki (veritabanından) kullanıcı bilgilerini gösteren bir uygulama inşa ediyorum. Ben sadece sunum katmanı için veri geçmek, ya da sadece doğrudan sunum katmanı içinde veritabanından bilgi almak için iş katmanı kullanmalısınız. Sunum katmanı SADECE verileri sunmak için kullanılması gerektiğini, SADECE veri almak için kullanılan erişimci tabakası ve tüm çalışma iş katmanı yapılabilir?

Ayrıca, farklı katmanların konuşan, (kullanarak gibi almak için sınıfları vs, şablonları eklemek için sınıfını kullanarak procedurally bir sınıfını kullanarak vs veri doğrulama veya fonksiyonlar vs şablonları göstermek için içeren bu prosedür şeyler yapmak en iyisidir, veya OOP kullanılarak veritabanından verileri vb)

Gördüğünüz gibi, ben işlerin nasıl anlamaya çalışıyor ve bir şeyler yapmak için en iyi yolu var. Söyleniyor, size herhangi bir tavsiye veya konuyla ilgili herhangi bir genel ipuçları varsa ... bunları bırakın lütfen ..

Teşekkürler

7 Cevap

Web uygulamaları ve N-katmanlı N-katmanlı kavramı JSON ve AJAX veya Flash ve Xmlrpc yaygın kabulü ile genişletti çünkü çoğunlukla, ilginç. Bu chart on Webopedia de bu ifade bir şaşırtma mavi çizgi görüntüler. Özetlemek gerekirse: iş, erişgeç ve sunum mantığı sunucusunda var olamazdı - ama bazı durumlarda, sağ tarayıcıda. N-katmanlı niyeti, ancak, separability. Eğer UI veya veritabanı üzerinden değiştirmek veya diğer UI'larda eklemeniz gerekiyorsa, size iş mantığı etkileyen olmamalıdır. HTML ve CSS Flex için atılır ve MySQL Oracle için dışarı değiştirilir günü bekliyorlar - Ve bu API belirleyecek budur.

Bu belirlenen gereksinimleri olduğunu, ve ben kullandığım bazı web uygulamaları, N-katmanlı varyasyonları aynı anda kullanılmaktadır. Örneğin LyrisHQ (bir e-posta ASP) alın. Onlar bir müşteri web uygulaması var. Son zamanlarda, onların Flash tabanlı uygulama iterek baktı var. Bu açıkça tarayıcıya veri hakkının bir çok nakliye ve Flash UI çoğaltılamaz iş mantığı biraz muhtemelen vardır. Bir farklı (ve üst üste binmek) gereksinimleri için gerekli olan ya da bu yana Bununla birlikte, her iki uygulamaları korumak gerekir.

En yaygın PHP uygulamaları tarayıcıya çok biçimlendirilmemiş veri nakliye dikkate değildir. Eğer olsaydı, bu sizin API'leri tasarlamak istiyorum nasıl çok hızlı bir şekilde sizi bilgilendirmek olacaktır. Çok büyük olasılıkla, size PHP sunum şablonları kullanılan benzer bir iç kontrolör sınıfına ek olarak ... XMLRPC, DİNLENME, veya SABUN konuşabilirsin kontrolörleri isterim. Bu kesinlikle basit bir web giriş sayfası için, bir LoginController sınıfa konuştuk giriş formu için bir PHP şablon var anlamına gelirdi. Bir XML arayüzü aynı şekilde aynı LoginController sınıfını kullanabilirsiniz. Eğer bir Ajax isteği içine SQL yazmak için çılgın olacağını zannedebilir gibi ... Eğer kesinlikle sunum şablonları içine yazma sorguları kaçınarak olacaktır.

Genellikle veritabanı back-end markaları geçmek için bir gereklilik yoktur asla çünkü iş katmanları, daha fazla veya daha az sıkı olabilir. Sıkı bir N-katmanlı tasarımda, nasıl iş nesneleri İş katmanı yeniden olmadan MS SQL MySQL geçiş olabilir gibi olur eğer sizin veritabanına konuşmak istiyorum. Bazen bu her tablo (Tablo Geçidi) için nesneleri modelleme yapılır, her bir satır (aktif rekor), her katılmak, ya da her bir işlem. PDO veya PHP-ADO gibi bir şey yararlıdır, ama tam izolasyonu için yetersiz olduğu yer burası. Hibernate gibi Java ORM / Kalıcılık katmanlar genellikle bir nesne Query Language (OQL) sağlayarak, izolasyon, bu tür daha iyi göstermektedir.

Kendim, ben şu anda bir MS-SQL birine üzerinde MySQL tabanlı PHP uygulaması bir arka-uç geçişi taahhüt ediyorum. Uygulama sadece hiç doğrudan SQL sorguları kullandı. Bir sınıfta sorguları bir dizi çekmek ve onları soyutlayarak, ya da sınıflara ve umarım iş mantığı değiştirerek değil ya nasıl seçerek düşünün. En azından, tüm SQL dolaylı aramaları yapmak isteyeceksiniz. (S.O. post on PHP ORM.)

Ve nihayet, OOP hakkında soruya: ihtiyaçlarınızı karşılamak için nasıl kullanmak gerekir. Benim kişisel tekniği top çok yakında bir sınıf içine Refactor ve bir şablon olacak, haddeleme almak için doğru bir kaç dakika için bir PHP sunum şablonu mantığı ile başlamaktır. Ben ortak fikirler varsa, ben DNRY ilkesini korumak çabası, paylaşılan sınıflara rutinleri patlak. (A S.O. post on that here. cepten N-katmanlı tasarımı için temel bir gereklilik değildir. DNRY sürelerin Genellikle. Tho, sıçramalı kodunuzu tutmak için çok önemlidir ve kapsamı-shift bir API yok. Ne olsun sizin kadar Refactor devam etmek gerekir. ben cepten sizi oraya yardımcı olacaktır eminim.

Bir keresinde büyük modelleri (iş katmanı) (erişimci tabaka) büyük kontrolörleri tercih edilmesi gerektiğini söyleyerek bir şeyler okuyun.

Ayrıca: Gerçekten proje bağlıdır. Benim gözümde her zaman buna çoğu zaman basitçe fonksiyonları gibi doğrulayıcılar yapmak daha kolaydır, özellikle PHP gibi betik dilleri, (muhtemelen herkes burada kabul edecek) her şey için OOP kullanmak mantıklı değil ...

Ben kesinlikle onun amacı yenmek sunum katmanı veritabanı aramaları için değil tavsiye.

Orada multi-tier architecture için farklı yaklaşımlar ve farklı öneriler var.

Ben birlikte çalıştığım Zend Framework genellikle form Fat model / İnce denetleyici varyantı olduğunu.

(Bu durumda) Bu yazı Notes on Choosing a PHP Framework karşılaştıran oldukça iyi olmak için Zend Framework CakePHP bulursanız.

Benim yukarýya büyük fark Zend Framework yapılandırma odak çok farklı CakePHP tarafından alınan kongre-over-yapılandırma yaklaşımdır.

Çok katmanlı mimari uygulama, sizin zorunlu bir şekilde ya da en azından kötü bir şey değil OOP, kullanarak içine itti eğer anlamda bir çok yapar bir çerçeve kullanarak.

Siz tabii ki uygulamak, saf fonksiyonel çağrıları ile 3 katmanlı mimarisi söylüyorlar, ama benim deneyimlerime dayanarak bu ölçeği değil.

Bir web sitesi için aslında çünkü katman iletişim yolu oldukça farklı MVC deseni, iyi bir seçimdir.

"Normal" 3 katmanlı kemer ve MVC deseni arasındaki fark görünümü denetleyicisi ve sunum katmanı olarak sadece 3 katmanlı kemerin mantığı katmanı erişimi modeli katmanı, hem de erişimi olmasıdır.

koymak, bu UI yapı / akışı ile ilgisi varsa: i Franz özellikle .. Ayrıca kod nereye gitmeli ayırt yardımcı başparmak bir kural kullanabilirsiniz büyük denetleyicileri üzerinde daha büyük modelleri tercih hakkında söylediklerini kabul denetleyicisi; saf iş mantığı ise, bu modelde gider ..

Ben PHP suları test önce Struts ile deneyim bir sürü vardı bir Java geliştiricisi olarak ekleyeceğiz, bir betik dili MVC fikirleri uygulamak için anlamak biraz zaman aldı .. ben şahsen bulduğu bir sistem gibi kullanarak CodeIgnitor, bir çok yardımcı oldu .. çok Struts gibi, çerçeve sağlar ve iyi MVC kalıplarını teşvik ..

Benim dünyam bu gibi görünüyor:

DB1 <- Model1 to provide accessor functions, data integrity, business rules for this data set DB2 <- Model2 to provide accessor functions, data integrity, business rules for this data set

Controller : Controls data flow to views, filters/organizes data from views. Implements business rules for the given application. Knows the business rules between Models.

Views: Nothing more than templates that display data provided by the Controller. Pass all data to the controller. Has no knowledge of Model1 or Model2 or the the business logic that governs them.

Bu bulmacanın eksik parçası olarak ben Design Patterns biraz araştırma yapıyor öneririz. Bu konuyu (Apress itibaren olanları iyi) yanı sıra Design Patterns 'İncil' kapak PHP-özgü çok sayıda kitap vardır: "Design Patterns: Elements of Reusable Object-Oriented Software"

En Doctrine2 daha kararlı sürümü için bekleyelim.

Kalıcılık-cahil alanı nesne felsefesi ile geliştirilen ediliyor. Bu çerçeve yardımı ile çok katmanlı bir uygulama geliştirmek için çok daha kolay olacaktır.