Kazablanka'nın içgörüsel cevabına eklemek için - birden fazla sınıfın bir tür varlıkla aynı temel şeyleri yapması gerekiyorsa (bir koleksiyona kullanıcı ekleme, iletileri işleme vb.), Bu süreçlerin de ayrı tutulması gerekir.
Bunu yapmanın birden çok yolu vardır - miras veya kompozisyon ile. Kalıtım için, soyut temel sınıfları, örneğin kullanıcıları veya iletileri işlemek için alanlar ve işlevsellik sağlayan somut yöntemlerle kullanabilirsiniz chatroom
ve user
bu sınıfları ve (veya diğer) gibi varlıkları genişletebilirsiniz.
Çeşitli nedenlerle , kompozisyonu kalıtım üzerinde kullanmak iyi bir genel kuraldır. Bunu çeşitli şekillerde yapmak için kompozisyon kullanabilirsiniz. Kullanıcıların veya mesajların kullanımı, sınıfların sorumluluğunda merkezi işlevler olduğundan, kurucu enjeksiyonunun en uygun olduğu söylenebilir. Bu şekilde bağımlılık şeffaftır ve gerekli işleve sahip olmadan bir nesne oluşturulamaz. Kullanıcıların veya mesajların ele alınma şekli değişecekse veya genişletilecekse, strateji modeli gibi bir şey kullanmayı düşünmelisiniz .
Her iki durumda da, esneklik için somut sınıflara değil, arayüzlere kod yazdığınızdan emin olun.
Tüm söylenenler, bu tür kalıpları kullanırken her zaman ek karmaşıklığın maliyetini düşünün - buna ihtiyacınız olmayacaksa, kodlamayın. Büyük olasılıkla, kullanıcıların / mesajların işlenme şeklini değiştirmeyeceğinizi biliyorsanız, bir strateji modelinin yapısal karmaşıklığına ihtiyacınız yoktur - ancak endişeleri ayırmak ve tekrardan kaçınmak için ortak işlevselliği yine de boşaltmalısınız bunu kullanan somut örneklerden - ve, aksi yönde geçersiz kılma nedenleri yoksa, bu tür kullanım işlevselliğinin (sohbet odaları, kullanıcılar) kullanıcıları bu işlemi gerçekleştiren bir nesneyle oluşturun.
Özetlemek gerekirse:
- Casablanca'nın yazdığı gibi: Sohbet odalarını, kullanıcıları vb. Ayırın ve kapsülleyin.
- Ayrı ortak işlevsellik
- Veri sunumunu (erişim ve mutasyonun yanı sıra) boşanmak için bireysel işlevselliği, tek tek veri örnekleri veya toplamaları üzerinde daha karmaşık işlevsellikten ayırmayı düşünün (örneğin,
searchUsers
bir toplama sınıfında veya bir depoda / kimlik haritasında gidebilecek bir şey) )