Tablo katıldı uğraşırken nasıl nesne sınıfları etkili yazıyorsunuz?

4 Cevap php

Ben şimdi değilim, ne de benim becerileri en çok bir hobi olarak deneyimlerinden öğrendim olmuştur böylece şimdiye kadar profesyonel bir programcı olacak herhangi sanrılar var mı söyleyerek başlamalıdır.

Belli alanlarda iyi bir basit bir tanıtım gibiydi ve bana basit bir web tasarım uygulamaları için izin gibi ben PHP öğrendim.

Ben nesneler hakkında öğrendim, vb Öğretmenin temel examnples sınıfları bir kural olarak her veritabanı tablosu kendi sınıfına sahip olması gerektiği fikrini kaplı. Bu çok basit bir mysql sorguları vardı biz yazdı, fotoğraf galerisi projesi için iyi çalıştı iken, şimdi benim projelerin daha karmaşık alıyorsanız çok iyi çalışmıyor. Ben bunun yerine tamamen sınıfını görmezden ve vaka bazında bir durumda bunu işleme, YA, daha da kötüsü sınıfa bazı verileri birleştirerek edilmiş ve bir olarak dinlenme oldum bir tablo katılmak gerektiren iki ayrı tablodan veri gerekiyorsa Bana verimsiz görünüyor ayrı bir varlıktır ve iki sorguları yapıyor.

Eğer bir konu görmek eğer bir örnek olarak, yazdığım bir forum içerik izlerken, ben konuları masaya, mesajlar masa ve kullanıcı tablodan veri almak. İplik verileri benim konu sınıfını kullanarak denir oysa kullanıcı ve mesajlar tablo sorguları, bir katılmak ve bir nesne olarak örneği değil yoluyla alınır.

Peki nasıl daha az 'aptal', daha iyi bir kelime istediğiniz için bir şey işlerin benim şimdiki durumundan olsun. Şu anda bağlantı ve kaçan değerler vb, bir üst db sorgu ortak sorgular ve yöntemleri ile ilgilenir sınıf ve diğer sınıflar (Konu, Yükle, Oturum, Fotoğraf ve olanları thats tüm değildir ile ilgilenen bir DB sınıf var kullanılan post, Kullanıcı vb) o çocukları vardır.

Do I make a big posts class that has the relevant extra attributes that I retrieve from the users (and potentially threads) table?
Do I have separate classes that populate each of their relevant attributes with a single query? If so how do I do that?
Because of the way my classes are written, based on what I was taught, my db update row method, or insert method both just take the attributes as an array and update all of that, if I have extra attributes from other db tables in each class then how do I rewrite those methods as obbiously updating automatically like that would result in errors?

Kısacası benim anlayış şu anda sınırlı olduğunu düşünüyorum ve daha karmaşık sınıfları yazmak için nasıl temelleri geldiğinde bazı işaretçiler istiyorum.

Edit:

Cevaplar için teşekkürler şimdiye kadar onlar bana işaretçiler ve düşünceler çok ve okuma bir sürü malzeme verdik. Ne istiyorum gerçi belki farklı insanların nasıl basit bir tablo sınıfların herhangi bir miktar ile katılmak işlemek için karar verdik bir fikir mi? Eğer sınıflara öznitelikler eklemek mi? Sınıfın dışında sorgu sonra her sınıfa sonuçları geçmektedir? Başka bir şey?

4 Cevap

Tüm kitaplar bir veritabanı şemasını uygun sınıfları kümesi tasarımı hakkında yazılmıştır.

Uzun lafın kısası: bunu yapmak için kimse-boyut-uyan tüm yolu var, size bir uygulama ile uygulama bazında yapmak istiyorum ticaret off hakkında tasarım kararlarının bir sürü yapmak zorunda.

Siz yardımcı olmak için bir kütüphane ya da çerçeve bulmak, anahtar kelimeler olabilir: ActiveRecord, ORM (Object Relational Mapper)

P.S. Hiçbir fikrim ruh-öldürme analiz felç ve içine alabilirsiniz tasarımı üzerinde potansiyeline sahiptir. Muhtemelen app için çalışabilir basit bir şey yapmak.

Benim (aşağıda) Yorumlarınız için kod örneği:

$post = new PublishedPost($data);
$edit = $post->setTitle($newTitle);
$edit->save();

Bu epik uzunluk girmeden cevaplanması gereken çok geniştir.

Temel olarak, dört belirgin veri kaynağı Mimari Grafikleri yoktur Patterns of Enterprise Architecture, Table Data Gateway, Row Data Gateway, Active Record ve Data Mapper . Bu varyasyon bazı ortak php frameworks uygulanan bulunabilir. Bu kavramak ve uygulamak kolaydır.

Eğer uygulamanızda veritabanı ve iş nesneler arasındaki impedance mismatch mücadele başladığınızda zor alır nerede. Bunu yapmak için, bu kapsam dışındadır açıklanması vb Sorgu Nesne Kimlik Maps, Lazy Yükleniyor, Depoları, gibi Nesne-İlişkisel Davranışçı bir dizi yapısal ve Meta Haritalama Desenler vardır. Onlar PoEAA neredeyse 200 sayfayı kaplayacak.

Eğer bakmak ne is Doctrine veya Propel - en iyi bilinen iki PHP ORM - Size uygulamada kullanabilirsiniz bu modellerin çoğu ve hangi uygulamak olduğunu Geçerli veritabanı erişimi işleme değiştirin.

Endişeler çoğu gibi CakePHP, symfony ve Zend Framework olarak iyi test edilmiş çerçeveler içinde bulunan mevcut çözümleri inceleyerek yanıtlanabilir. Kendi yaklaşımlarını incelenmesi ve kaputun altında Bakmak sorularınıza ışık tutacak. Kim bilir? Hatta bunları kullanarak gelecekteki projeler yazmaya karar verebilirsiniz!

Onlar bu sorunları çözmek için birlikte başlarını koyarak yıl geçirdim. Yararlanın!

Ödeme Doctrine:

İşte Doktrini kullanarak bir forum uygulaması bir örnektir.

http://www.doctrine-project.org/documentation/manual/1_2/en/real-world-examples#forum-application