Sonra bir yeşil ışık var ve işleri temizlemek için birileri bir GameManager yazıyor. Muhtemelen bir avuç GameStates tutmak, belki de bir kaç GameObject saklamak, büyük bir şey değil, gerçekten. Sevimli, küçük bir yönetici.
Biliyor musun, bunu okurken kafamda küçük alarmlar vardı. "GameManager" isimli bir nesne asla sevimli veya küçük olmayacak. Ve biri kodu temizlemek için mi yaptı? Daha önce neye benziyordu? Tamam, bir kenara şakalar: Bir sınıfın adı, sınıfın ne yaptığının açık bir göstergesi olmalı ve bu bir şey olmalıdır (aka: tek sorumluluk ilkesi ).
Ayrıca, GameManager gibi bir nesneyle hala bitebilirsin ama açıkça çok yüksek bir seviyede var ve üst düzey görevlerle ilgilenmeli. Oyun nesnelerinin bir kataloğunun bakımı? Belki. Oyun nesneleri arasında iletişimi kolaylaştırmak? Elbette. Nesneler arasındaki çarpışmaları hesaplamak? Hayır! Ayrıca, Yönetici adı üzerine kaşlarını çattığının nedeni de budur - çok geniş ve bu başlık altında çok fazla suistimal yapılmasına izin veriyor.
Sınıf boyutlarına ilişkin hızlı bir kural: Sınıf başına yüzlerce kod satırına giriyorsanız bir şeyler ters gitmeye başlar. Aşırı kıskanç olmadan, herhangi bir şey, yani, 300 LOC benim için bir kod kokusudur ve 1000'den fazla gidiyorsanız, uyarı zilleri çalınmalıdır. Her nasılsa, 1000 kod satırının her biri 250 iyi yapılandırılmış 4 sınıftan daha kolay anlaşılması gerektiğine inanmakla, kendinizi kandırıyorsunuzdur.
Zaman bir sorun haline geldiğinde, ayrı bir sınıf yazmanın ya da bu dev yöneticiyi alt yöneticilere bölmenin bir yolu yoktur.
Bence durum böyle çünkü sorunun her şeyin tam bir karışıklığa yol açtığı noktaya yayılmasına izin veriliyor. Pratiği üstlenmeden - Aradığınız şey olduğu sürece sürekli minik artışlarla kodun tasarımını geliştirmek gerekir .
Bunun olmasını önlemek için ne önerirsiniz?
Sorun teknolojik bir problem değil, bunun için teknolojik düzeltmeler aramamalısınız. Sorun şudur: Ekibinizde yekpare kod parçaları oluşturma eğilimi ve bunun gibi bir şekilde orta / uzun vadede yararlı olduğu inancı var. Ayrıca, takımın oyunun mimarisini yönlendirecek güçlü bir mimari iptali olmadığı görülüyor (ya da en azından bu kişi bu görevi yerine getirmek için çok meşgul). Temel olarak, tek çıkış yolu ekip üyelerinin bu düşüncenin yanlış olduğunu fark etmesini sağlamaktır. Kimsenin lehine değil. Ürünün kalitesi kötüleşecek ve ekip işleri düzeltmek için sadece daha fazla gece harcayacak.
İyi haber şu ki, temiz kod yazmanın acil ve somut faydaları o kadar büyük ki, neredeyse tüm geliştiriciler faydalarını çok hızlı bir şekilde gerçekleştiriyor. Takımı bir süre bu şekilde çalışmaya ikna edin, sonuçlar gerisini halleder.
Zor olan kısım, kötü kodu neyin oluşturduğuna dair bir his geliştirmenin (ve daha iyi bir tasarımla hızlı bir şekilde ortaya çıkma yeteneğinin) gelişimde öğrenmesi daha zor becerilerden biri olmasıdır. Önerim, ekipte bunu yapabilen yeterince kıdemli birisinin olması umuduna dayanıyor - insanları bu şekilde ikna etmek çok daha kolay.
Düzenleme - Biraz daha fazla bilgi:
Genel olarak, sorununuzun oyun geliştirme ile sınırlı olduğunu sanmıyorum. Özünde, bu bir yazılım mühendisliği sorunu, bu yüzden yorumlarımı bu yönde. Farklı olabilir ne oyun geliştirme endüstrisinin doğası, daha fazla sonuç ve diğer gelişme türlerine göre daha son tarih odaklı, emin değilim.
Özellikle oyun geliştirme için, "özellikle oyun mimarisi" ipuçlarıyla ilgili StackOverflow'ta bu sorunun kabul edilen cevabı şöyle diyor:
Takip nesne yönelimli tasarım Katı prensipleri ....
Bu aslında tam olarak söylediğim şey. Baskı altında olduğumda kendimi de büyük miktarda kod yazarken buluyorum, ancak bunu teknik borç olduğunu kafama soktum. Benim için iyi çalışma eğilimi, günün ilk yarısını (veya dörtte üçünü) büyük miktarda orta kalite kodu üreterek geçirmek ve daha sonra bir süre geriye yaslanmak ve bir süre düşünmek; biraz kod geliştirmek için kafamda veya kağıt / beyaz tahta üzerinde biraz tasarım yapmak. Çoğunlukla, tekrarlayan kodları farkederim ve okunabilirliği geliştirirken her şeyi parçalayarak toplam kod satırlarını gerçekten azaltabilirim. Bu sefer yatırım çok hızlı bir şekilde karşılığını veriyor, buna "yatırım" demek aptalca geliyor - oldukça sık sık (bir hafta sonra), günümün yarısını boşa harcamış olabilecek böcekleri toplayacağım.
- Onları kodladığınız günde düzeltin.
- Birkaç saat içinde yaptığınız için memnun olacaksınız.
Aslında yukarıdakilere inanmak zor; Bunu kendi işim için yapmayı başardım, çünkü etkileri tekrar ve tekrar deneyimledim. Öyle olsa bile, daha fazla çalkalama yaparken kod çözmeyi haklı çıkarmam hala zor. Ne yazık ki, bu öneri belki de çok genel ve yapmak kolay değil. Ancak buna şiddetle inanıyorum! :)
Özel örneğinizi yanıtlamak için:
Bob Amca'nın Temiz Kodu , kaliteli kodun neye benzediğini özetlemek için harika bir iş çıkardı. Neredeyse tüm içeriğine katılıyorum. Bu nedenle, bir 30 000 LOC yönetici sınıfı örneğini düşündüğümde, "iyi sebep" bölümüne gerçekten katılıyorum. Kulağa rahatsız edici gelmek istemem ama bu şekilde düşünmek soruna yol açacaktır. Tek bir dosyada bu kadar fazla kodun olması için iyi bir neden yoktur - neredeyse 1000 sayfa metindir! Yerelliğin herhangi bir yararı (uygulama hızı veya tasarım "basitlik"), geliştiricilerin o canavarlığı yönlendirmeye çalışırken tamamen tıkanmasıyla derhal etkisiz hale getirilecek ve bu birleşme, vb.
Eğer ikna olmamışsanız, en iyi önerim yukarıdaki kitabın bir kopyasını almak ve bir göz atmak olacaktır. Bu tür bir düşünceyi uygulamak, gönüllü olarak, güzel bir şekilde yapılandırılmış temiz, kendi kendini açıklayan bir kod yaratmaya çalışanlara yol açar.