Bir çocuk sınıfta bir sınıf ve CRUD tablosunda MySQL select deyimleri koymak overkill?

4 Cevap php

Ben veritabanına erişim için 2 sınıfları var:

MovieDAO - Sadece ifadeler "seçeneğini" kullanarak erişim veritabanı; amaç web tarayıcısında görüntülemek için veri almak içindir.

ve

MovieExtendedDAO (extends MovieDAO) - which is more complete veallows for creating/updating/deleting a movie in addition to the inherited functionality. This class is intended to be used only in the site's administrative area.

Ben bu gibi ayırmak için overkill olduğunu söylendi.

Is this is a normal way to do things or part of a design pattern? Or is there no real benefit to doing this? My main intention was to simplify things for the public side: a kind of optimization for how much stuff needs to get loaded up vealso what kind of things can happen on the public (non-admin) side. Thank you for your comments!

4 Cevap

o temelde bir row data gateway var, kötü bir yöntem değil. Bu anlamda ben bir ağ geçidi (yani MovieFinder ve MovieGateway) gibi (aynı terminoloji fowler kullanan), bir bulucu daha fazla, ve movieextendeddao olarak movieDAO düşünürdüm.

Daha karmaşık alanı mantığı (yani film hakkında çeşitli şeyler hesaplama) almaya başladıktan sonra sonra bazı diğer veri erişim modellerine bakabilirsiniz, ama yaklaşımınız ne yaptığınızı için makul görünüyor.

Bu overkill değil. Tabii, kod erişimi sınırlandırmak için daha iyi yollar vardır. Ama ne yapıyorsun veri ayıran alma verileri değiştirerek (kayıtların bir dizi) (tek kayıt örneği) olduğunu.

Belki de, daha farklı, daha anlamlı, adları sınıfları verebilir. Bunun yerine MovieDAO size MovieQuery kullanabilirsiniz yerine MovieExtendedDAO size Sinema kullanabilirsiniz. Sen fonksiyonu tutun. şimdi var, ama sınıfları kendine daha açıklayıcı yapmak gibi ayrılır.

Eğer sınıfları ayıran neden düşünmelisiniz. O sizden daha performans aşkına (basit okur için büyük bir sınıfı yüklemek için değil) için ise en kesinlikle erken optimize. Eğer böyle bir ihtiyaç (ki bence asla olmayacak. Eğer büyük sınıfları hakkında endişeleriniz varsa APC ya da diğer bazı baytkodu önbellek kullanın) varolduğunu gerçek veri söyleyebilirim kadar bu tür kararlar olmamalıdır.

Izinleriyle ilgili - Bu uygulama mantığı olmalı ve fiziksel olarak farklı sınıflara yöntemlerini ayıran edilemez bir şeydir. Ayrıca, bu tür işlemleri soyutlayan bir temel DAO uzanan değil mi? her model ayrı ekleme / silme / güncelleme yöntemleri uygulayarak olmayacaktır olacak? Bu işlemleri çok fazla farklılık yoktur ve ortak bir üst sınıfa ait olmalıdır.

Sana (tavsiye) gibi Zend_Db olarak PHP veritabanı soyutlama için bazı iyi açık kaynak uygulamaları, bir göz öneririz.

Burada gördüğüm asıl sorun database access (Model) ile permissions (Kontrol) karıştırma olmasıdır. Ben Model - View - Controler mimarisi karşı gider ama hayır ben herkesin kullanmak gerekir demiyorum. Bu karmaşık desen türüdür. Bu çözüm üzerinde avantajlara sahip olabilir. Does a change in your permissions affect your class model? Sanırım.

Appart MVC erişimi kontrol etmek için başka yollar olabilir. Veritabanında At (kullanıcı tarafından, örneğin).