MySQL Durum Modeli -

3 Cevap php

Yani benim co-işçi ile bir çerçeve-vari sistem üzerinde çalışıyorum. Bizim şimdiki meydan iyi durumları uygulamak için nasıl. Çoğu kez, bir durum onunla (bir kullanıcıya görüntülenecek bir tablo satır veya metin için bir renk. Vb) benzersiz veri taşıyacak. Şu anda, tüm bu verileri içeren bir durumları tablo var. "Css_class", bir rekor bu statüye sahiptir zaman, belirtilen CSS sınıfı (bu durumda bir tr içinde) elemanına bağlı: bu tabloda bulunan bir sütundur. Ayrıca, bir başka rekor özel statüye atamak için, bir yabancı anahtar bu veritabanı tablosunda belirtilen (bu durumda, bir kullanıcı özel bir statüye sahiptir. Kullanıcıların tabloda, bir statuses_id yabancı anahtar var So). Bu uygulama iyi çalışıyor, ama bir kaç sorun vardır. İlk olarak, ne bir kayıt, belirli bir durum ise PHP belirli bir eylemi gerçekleştirmek için gerekirse? Biz şimdi bunu yolu bu gibi bir şeydir:

if($user->status==0) 
{
    //execute some code
}

Durumları değiştirebilirsiniz eğer bu gerçekten iyi çalışmaz. Bir durumu, ve ilişkili kod sonları veya farklı amaçlanan daha davranır ya değiştirin.

Diğer konu, ve bir soru gönderme için ana nedeni tablo sütunu "css_class" içeriyor olmasıdır. Bu çok yönlü ve bize çok hızlı bir şekilde belirli statü stilini değiştirmek sağlar. Ama biz gerçekten bir veritabanı içinde kod koyarak fikrini sevmediğim. Belki bir veritabanında CSS sınıfları olan mutlaka kötü bir şey değil, ama gerçekten yaygın bir uygulama olduğunu bilmiyorum. Herhangi bir fikir?

EDIT:

Ne ben ilk birkaç cevaplar elde ettik MVC framework korumak için benim modeli şeyler dışında bütün görünümü şeyler tutmak gerektiğidir. Benim iddiam ben veritabanından css_class adını tutmak, sonra onu atamak için hangi sınıf karar vermek için görünümde durum id kontrol ediyorum olmasıdır. Ben veritabanında sınıf koyarsanız, ben Modelinde bilgi görüntüleme koyuyorum. Ben veritabanında CSS sınıfları koymak yoksa o zaman ben Görünüm (kendisine ait kimlik denetimi) Model bilgiler koyuyorum. Yani Model yukarı muddying değil, ben ....... yerine görünümü kadar çamurlu

3 Cevap

Ben bu kadar çözüldü (ve ben şimdi birkaç MVC uygulamaları ile çalıştık) gördüğüm en zarif şekilde veritabanında sadece ilgili verileri depolamak için. Örneğin Eğer veritabanında status = "kırmızı" depolamak ve CSS açısından, kırmızı bir durum ile ne yapacağını bilmek görünümüne onu terk ediyorum. Her zaman bir sayfa-sayfa temelinde css değişiklikler şeyler güncellenmesi olması gerekmez bu şekilde - Sorun daha sonra yeniden yapılar oluşturur yeterince ileri bir manzara katmanı tasarlarken tarafından çözüldü.

Şimdi kod veritabanı kapalı sunum bilgileri çekin ve Görünüm seviyeye boyunca iletebilir ya, shudder bilmek gerekiyor çünkü Modeli bu bilgiyi Passing biraz, içerik / sunum ayrılık noktası yendi Eğer şimdi bilgi akışının kontrolünü kaybettik gibi, bakım bir kabus yapar Görünüm katman kodu, veritabanı sağdan o şeyleri çekerek olacak.

Eğer DB bu depolama paradigma devam etmek istiyorsanız, onların gelen TAMSAYILI kimlikleri durumların VARCHAR isimlerini eşler başka bir tablo yapabiliriz.

Ancak, bu benim çerçeve olsaydı. Ben veritabanında böyle görünüm bilgiyi saklamak olmaz. Bu benim MVC kurulum V tarafından ele olacaktır.

Görünümünde bir veri modelleme noktadan:

  • Durumu her "tür" için farklı bir tablo var; tutmak kullanım durumları (örneğin) sayfa durumların ayrı - grubuna benzeri varlıkları bir araya.
  • Veritabanına CSS sınıfları koymak, ancak statü göstergesi çeşit kullanmayın - bu bir ENUM sütun olabilir, sen ön olası durumların kümesi biliyorum. Görünümü tabakasında uygun CSS sınıfı içine bu dönüşümü. Siz veritabanında bazı veri önler, çünkü CSS değiştirilemez bir durumda sonuna istemiyorum.