Basit DB Model

5 Cevap php

Bunu Modelleri (MVC) kullanarak küçük bir deneyim beni bırakır böylece çerçeveler veya bir şey kullanarak çok deneyimi yok. Ben şu vea bir çerçeve kullanarak hiçbir ilgi var. Ben bir web sitesi üzeriçiçindedede çalışıyveyaum ve bazı nesneleri modellemek içiçiçindede çalışıyveyaum ama ben sınıf tasarlama gerektiğiçiçindedei tam olarak nasıl emiçiçindede değilim.

Örneğiçiçindede, şu vea doğrudan ulaşılabilir bir kaç kamu üyeleri ile bir sınıf var. Ben (, silme, güncelleme seçeneğiçiçindedei seçiçiçindede) bazı işlevlere prototip başladı ama emiçiçindede değilim

  1. Bu işlevler statik olmalıdır eğer
  2. If these functions should accept parameters veya use the class members içiçindedestead
  3. Bu fonksiyonlar hatta şu vea nasıl bulunmalıdır eğer
  4. Ben gidiyveyaum bütün kavram yapılacak doğru şey ise

Ben bir model sınıf oluşturmak içiçiçindede nasıl içiçindedeterwebs ipuçları herhangi bir tür bulmak içiçiçindede görünmüyveya olabilir.

5 Cevap

Eğer bir fabrika sınıfını kullanarak ediyorsanız o zaman tüm fiiller genellikle örnek yöntemleri ve fabrika DB oturumun çeşit örneği.

Fiiller üye adlı işletmenin sınıfının iseniz güncelleme genellikle bir örnek yöntemi ise genellikle statik bir yöntem seçmek ve silmek genellikle her iki yönde tanımlanmıştır (IE: delete(recordID) ve entity.delete())

Bütün kavram yapılacak doğru şey olduğunu ama bunu yanlış yapmak için gidiyoruz. Dönemi. Böyle bir ölçeklenebilir modeli yapma insanların emrinde olması çok daha fazla zaman ve çaba gerektirir. Ben size bir çerçeve kullanarak hiçbir ilgi var ama sen gerektiğini biliyorum.

Senin soru Benim çıkarım bu düşük profilli bir proje olduğunu ve size istediğiniz şekilde inşa edebilirsiniz patron / müşteri / öğretmen yeterli esnekliğe sahip. Unutmayın ki, burada ben bu üzerinde çalışırken düşünmek ne olduğunu.

MVC sizin için yeni bir kavram ise, Test-Driven Development yanı sıra neredeyse kesinlikle ve yabancı biridir. Ancak, bunu yaparken ben ilk OOP gerçek bir anlayış içine kırık, bu yüzden bunu bir deneyin vermek öneririz. Senin modeli sınıflara karşı ilk olarak bazı basit birim testleri yazmak olanlar modeli sınıfları kullanılmış olacak nasıl sergiyi egzersiz yoluyla götürecektir. (Bir TDD saf değilseniz veya nesne grupları) bu nesnelerin her biri harici API ile çalışma olacak ve bu internals tasarımında kılavuz yardımcı olacaktır. Belgeleri de bazı harika örnekleri olduğu gibi, PHPUnit başlarken dikkat edin.

Ben TDD yaklaşım aşağıdaki sonuçlara götürecektir düşünüyorum:

  1. Muhtemelen değil. Kesinlikle bir şey bir kopyasını gerektiğinde statik veri / yöntem genellikle sadece yararlıdır. Ben belki DB gibi bir kaynak bağlantısı bu nadiren böyledir kenara web uygulamaları bulabilirsiniz.
  2. Bu fonksiyon, ne bağlıdır. Yerel değişkenleri kullanarak yan etkileri, ya da nesnenin devlet değişiklikleri ima unutmayın. Eğer üzerinde çalışmasına gerek veri tüm nesnenin durumunu değiştirmek gerekiyorsa, bir parametresini kullanın ve bir değer döndürür. Bu yöntemler bu tür test etmek de kolay.
  3. Yine, onları uygulamada nasıl kullanılacağını göstermek, bu işlevler için yazma testleri, doğru tasarlanmış olup onları da gerek olup olmadığı hakkında bir sonuç, bir yol veya başka götürecektir. Onları değiştirmek için korkmayın.
  4. Kesinlikle. Başka nasıl en az bir kez kendi uygulama rulo yoksa MVC ile rahat olmak için gidiyorsun? Eğer daha profesyonel bir çerçeveye taşımadan önce Aslında, gerçek deneyime sahip kavramları kavramak için muhtemelen daha iyi. Çerçevenin kavramlar ve kurallar oldukları şekilde neden bu şekilde anlayacaksınız.

Oh, ve bir model sınıf ne buluyoruz netlik eksikliği, muhtemelen çoğu özelleştirilmiş bir uygulamanın parçası olduğunu aslında kaynaklanmaktadır. Bu veri modeli ve etki mantık, bu yüzden bir sürü vaka özgüdür. Iyi kaynak olsa da, IMHO olan mükemmel bir kitap Desenler Enterprise Application Architecture nasıl ve neden bir desen veya başka bir "model" sınıfları belli bir set tasarımı üzerinde ayrıntılı bir sürü gider Martin Fowler, olduğunu. İşte online pattern library - Açıkçası kitap daha ayrıntılı.

Bu biraz yardımcı olur umarım.

PHP kullanırken, nesne yönelimli model tasarımı biraz faydaları ile ekstra çalışma ekler düşünüyorum - Büyük çerçeveler bakarak bile, bu sadece Zend MVC f.ex multiparadigm yaklaşımı (bkz. resultsets alabilirsiniz doç-diziler kullanmak için yaygındır .)

Nesne-İlişkisel haritalama çok daha Java gibi güçlü yazılmış dilleri arasında kurulmuş olsa, orada PHP araçları gibi zaten (f.ex Doctrine). Sen OO-odaklı bir model olan istediğiniz ne varsa bunu kontrol, ama OR-haritalama o kendi ciddi sorunları vardır ve PHP az kullanım olabileceğini farkında olabilir (henüz dinamik bir dilde kendimi denemedim) .

Çoğu yeni başlayan proje için iyi bir çerçeve toplama genellikle gitmek için bir yoldur - bu size zaman kazandırabilir ve (orada her araç için farklı bir öğrenme süre sonra tabii ki) en iyi uygulamaları teşvik edebilir. Bazı çerçevesini kullanarak, her zaman kendi üzerinde deney öncesi (model tasarımı ve veri erişimi gibi) belirli sorunları çözmek için çerçevenin / toplumsal yaklaşım bulmaya çalışmalısınız.

Nesne yönelimli kavramları kullanarak soyut uzak veri erişimi için "doğru" yolu bir sürü insan için sıcak bir düğme konudur. Başka bir deyişle, bunu yapmak için çeşitli yollar vardır ve hiçbir "tek doğru" yolu yoktur.

Eğer ciddi varolan bir uygulama yükseltme yapıyorsanız en iyi kendi çalışmalarını haddeleme. Zaten bağımlı veritabanı kodu bir yığın var ve gerekli üstlenmeden için bazı sınırları var olmasıdır. Ayrıca üstlenmeden bir sürü kaldırma (ya da azaltılması) kod tekrarını içerir çünkü kodu soyutlayarak hakkında öğretir. Eğer tamamlanması için bu yaptıktan sonra, bir veri modeli katmanı nasıl çalışması gerektiğini çok daha iyi bir fikir olacaktır. Ya da en azından, programlamak yol çalışması gerekir. Ve sen bir tane inşa dahaki sefere yapmak için değil ne bilecek. :-)

Yeni bir kod temeli başlıyoruz ve bir çerçeve veya nesne tabakası ile çalıştı değil ama bir tane inşa etmek gerekiyor biliyorum, o zaman ben verebileceğim en iyi tavsiye uygun sonra bir inşa, ve kod refactor için istekli olmaktır zaman o oluyor. Evet, büyük olasılıkla uygulama% 90 bir kaç defa tekrar almak anlamına gelecektir.

Bir nesne soyutlama katmanı Yazma zordur ve bir şeyler hakkında oldukça defansif bir yoğun kodu ile sona erecek, ve şansını almaz. Muhtemelen oldukça iyice ayıklanmış olacak çünkü ama o çalışma var bir kez, aynı zamanda, sağlam kod oluşturmak için nasıl bilecek.

  1. Hayır, çünkü statik yöntemleri test etmek zor
  2. Bazı kod görmeden cevap imkansız vb parametre, yaşam döngüsü, bağlıdır.
  3. ?
  4. Hayır

OOP daha iyi / kötü / doğru / yanlış ne daha iyi bir görünüm için deneyimi en az 10 yıl gerektirir.

Yerine tekerleği yeniden çok fazla zaman kaybetmeden bir OOP uzmanı değilseniz Yani, ben öneririm:

  1. Teknik kısmı için iyi bilinen bir çerçeve kullanın
  2. Iş / işlevsel bir kısmı için sınıfları / çerçeve oluşturmak.

(1) Eğer klasik teknik bölüm (Session, veritabanı etkileşimi, vb) için hiçbir zaman hazır yardımcı olacaktır. Eğer hataları diğerleri zaten yaptım yapmak önlemek olacaktır.

(2) Bu temel iş, bu "DNA" olmalıdır.

Ayrıca, bir well-known/good teknik çerçevesini kullanarak kaliteli kod okuma yapmak ve ilerleme yardımcı olacaktır. (Bazı çerçeveler kalitesiz gerçekten dikkatli olun)

Eğer yeterli deneyime sahip olacak zaman, (Onlar çok amaca hizmet) teknik çerçeve genellikle kötü çünkü ... teknik çerçeve kısmını atlayın ve kendi özelleştirmek / inşa etmek mümkün olacak. :)