CakePHP iyi bir model fonksiyonları refactor nasıl?

3 Cevap php

Hi I'm reading programming best practices and it is said that when creating a function we should make it do a only single specific task.

Ben verileri alır modeli işlevleri var ve bu verileri ilgili bulunuyor. Örnek:

$ This-> Öğrenci> StudentAssignments ();

Şu anda bu işlev öğrencinin atamaları artı öğrenci hakkında her atama ve veri soruyu alır. Ben hepsini kullanın. Ben DB fazla arama üreten beri o yıpratıcı oluyor ilgili verileri (öğrenci ve soru verileri) alır ayrı işlevleri yapmaya çalışırsanız eğer benim sorundur.

Siz ne önerirsiniz?

3 Cevap

Üstlenmeden bu tür yaparken akılda tutulması gereken bir şey ...

I typically will have a Model->getSomethingAndSomethingElse functions in my models. These functions are public and meant to be called as a substitute for doing complicated (or any) find calls from the Controller.

What I will usually do is then build up a small collection of private functions in the model. In your case I might have something along the lines of...

Öğrenci> getStudentAssigmentsWithQuestions

o zaman bazı özel işlevleri çağırır yani

Sırayla Atama-> joinAssignmentQuestion vs diyebilirsiniz Öğrenci-> joinStudentAssignment diyebilirsiniz Öğrenci-> getStudent ki

Çift çizgi öneklerin markdown çünkü onları kalın şeyler istiyor çünkü kaldırıldı. You php5 kullanıyorsanız altını çiziyor zaten sürece "özel" veya "proteced" anahtar kelimeler kullanmak gibi gerçekten önemli değil.

Temelde ben çok özel bir sorgu bina veya modeller içinde özel fonksiyonlar bina derneğin bir grup için bir kap olarak kamu yöntemi kullanın. Bu bana karmaşık veri döndü olan bir API olmasını sağlar, ama ben sorgu veya küçük parçalardan (veri, ilgili ilişkiler veya sorgu karmaşıklık türüne bağlı olarak) sonuç kümesini inşa - ideal amaç ve daha fazla kullanılabilir bir genel işlev çağrısı.

Ben gayet iyi gidiyorsun düşünüyorum. Ama sizin fonksiyonu için yeniden adlandırma yeniden gözden geçirilmesi gerektiğini

$this->Student->getStudentAssignmentsWithQuestions

Yoksa uygun düşünüyorum ne olursa olsun. Ben bir yerine belirli yöntemlerle unsurların her set getiriliyor, (ben bir yerde orada katılmak yapıyorsanız varsayıyorum) mümkün olduğunca veritabanına gibi birkaç görüşme yapmaya çalışın gerektiğini düşünüyorum. Bu, daha yöntemleri olsun (ve bu nedenle biraz daha testleri yazmak zorunda) edeceğiz gerçeğine yol açabilir, ama ben bunu yapmak için doğru yol olduğunu düşünüyorum.

To defend the design argument: Your method does just one single task; it fetches student's assignments with each assignment's questions.

Hayır, kod size söylediğim gibi tek bir görevi yerine basit işlevlerin içine blob yıkmak gerekir üstlenmeden kesinlikle hakkında endişeleriniz varsa. Evet, daha fazla veritabanı vuracaktır ama CakePHP'de önbelleğe alma ile çalışmak ne kadar kolay olduğunu düşünüyor, performans sorunu olmamalıdır. Ve eğer, o zaman bu noktada kod üstlenmeden endişe edilmemelidir.