Nasıl benim nesneler / sınıfları daha taşınabilir hale getirebiliriz?

4 Cevap php

Benim temel anlayış Object Oriented kodlama, benim durumumda PHP, hemen hemen bağımsız birbirlerinden tüm sınıfları yapmak istiyorum. O erken aşamalarında bulunuyor bana değişiklik yapmak için uygun bir zamandır bu yüzden sadece benim nesne yönelimli uygulama başladı.

İşte bu kural ya da ne olursa olsun onu aramak istediğiniz kırmak benim durumdur.

Bana bir php oturuma değişkenleri ayarlamak ve bana zaten kullanılarak ayarlanan bir değerin değerini görüntülemek bir view method hangi hadi var sağlayan bir set method vardır hangi bir seans sınıf var set yöntemi. Şimdiye kadar muhtemelen Tamam geliyor ama sonra benim sitenin her sayfasında ben oturum verileri ya da söylemek gerekir oturum nesnelerini erişmek gerekir. Ama sonra oturum nesnelerini kullanarak her sayfası dışında, ben de oturumun değer gerekir tüm derslerimde bunları kullanın. Ben şimdi tüm bu diğer sınıflar oturum sınıfına güveniyor, çünkü berbat nerede bu olduğuna inanıyorum.

Herhangi bir fikir bu yanlış ve bu ise, ne ben bunu önlemek için bazı yolları vardır ama yine de diğer sınıflara oturum verilerine erişim ve hala benim sınıfları gelecekteki diğer uygulamalar içine taşınabilir plug-n-play olmak varsa?

4 Cevap

Bu ilişki tür bağımlılıkları veya birleştirme denir. Genellikle (Nesne yönelimli ya da değil) herhangi bir uygulama kavramasını azaltmak istiyor. Sadece bunu nasıl belki bir programcı en önemli beceri, ve gerçekten bir kaç kural içine özetlenebilir olamaz.

Ancak, en temel, sen essential bağımlılıkları ve accidental bağımlılıkları ayırt denemelisiniz. Eski bir un-çözülebilir bir sorundur, bu nedenle denemek gerekir. Tüm sayfaları oturumuna erişmeniz gerekiyorsa Örneğin, o zaman gerçekten onlara o vererek yardımcı olamaz. Ama bu ele böylece uygulamayı faktör deneyebilirsiniz daha sadece, bunu bazı zamanlar gerekiyorsa.

Diğer bir önemli nokta, bileşenler arasındaki arabirimleri en aza indirmektir. x X ve Y x, o zaman geçmek X olmamalıdır dayanan bir alt kümesi ise . Bu genellikle iyileşme için bir oda var bir yerdir.

Bu diğer sınıfları etki alanı modeli açısından çalışması için gerekenler hakkında düşünün. Oturum verileri sizin diğer sınıfları tasarımı nasıl etkilememesi gerektiğini bir uygulama ayrıntı. Oturum nesnesi 100 özelliklere sahip olabilir, ama her sınıf çalışmak için bu özelliklerin her 100 gerekmektedir. Onlar veri oturumları, kurabiye, düz dosyaları, veritabanları veya toprak dışında bir uydu üzerinde kalıcı olup olmadığını bilmek gerekmez.

Sınıfları tasarımı sırasında ben faydalı buldum harika bir kaynak this book, ve soru için özel bölüm 6, "Çalışma Sınıfları".

Sen WorkingClass sadece StoringMapper çağrı ile, yapım soyutlama bir seviye WorkingClass> StoringMapper> Session ekleyebilirsiniz . Gibi, kolayca Session (örneğin DatabaseSession) WorkingClass herhangi bir değişiklik olmadan başka herhangi bir sınıf için kayıt işlemini "harita" olabilir.

Advice on framework design: Ben başka bir soruya yanıt olarak bunun için bazı kod yazdım

Genellikle, başka kullanan bir sınıf saf temel OO ve ne isteyeceksiniz olduğunu. Interfaces is a way to have your concrete logic isolated while letting other classes use this component in a uniform way. A simple and common way is to use a Factory veya Abstract Factory kullanılarak yerine doğrudan kurucular arıyor. Ayrıca Inversion of Control bakmak ve Dependency Injection (DI) paradigmaları olmalıdır. Here's a rudimentary example Bu sorun size yardımcı olabilir (ama farkında olmak, yazar Fabrikalar ve DI arasında karıştırır).

Bir değil karmaşık çözüm Session sınıftan bir arayüz ayıklamak olacaktır. Arayan bir oturum nesnesine ihtiyaç olacağını düşünüyorum. Sonra sınıfta arayüzünü gerçekleştirmek. Belki bu sınıf bir Singleton (tek gerçekleşme zamanında var olduğu için bir sınıf) yapmak isteyeceksiniz. Sonra, scriptin bileşenleri instanciates bir fabrika oluşturmak. Faktoring yöntemi bileşenlere oturum örneği geçmektedir.