Kural sistemleri için tasarım kalıpları?


12

Hızlı eğlenceli bir proje olarak, bir solitaire oyunu yazmaya çalıştım. Ancak kural sistemlerini yazarken, kendimi kirli hissettim , çünkü kodum tamamen yapılandırılmamış ve uzatılamaz hissediyordu , çünkü oyun mantığım tam spagetti kodu olduğu için.

Daha önce bu problemle karşılaştım ve programımın bu kısmını yazarken her zaman garip hissediyorum, bu yüzden bir oyunda kuralları tanımlamak söz konusu olduğunda denenmiş ve test edilmiş en iyi uygulamalar var mı?


Yanıtlar:


2

Ben özel bir sorun olduğunu düşünmüyorum çünkü belirli bir problemden çok fazla cesaret geliyor

Model Görünümü Denetleyici desenini kullanabilirsiniz: bu, sorununuzu her zaman kurallara uyan bir beahaviour olan "denetleyiciye bir davranışın nasıl uygulanacağı" na taşır (sınırlar).

Çok basit kurallardan bahsetmediğimiz sürece, bunları düzenleme şekliniz bir ifade sorunu yaratır . Her zaman basit (yapılandırılmış) ve ifade edici (eğlenceli kurallar yazma) olmakla çelişen taleplerle karşılaşırsınız.

MVC kullanımı işinizi basitleştirir, çünkü model bir durumu, yani kuralların uygulandığı bağlamı resmileştirir .

Daha basit değiştirilebilir davranışlar açısından karmaşık bir davranış oluşturmak için , Denetleyiciyi Strateji modelini ve / veya Durum modelini kullanarak uygulamayı yararlı bulabilirsiniz . Bir Kullanılabilirlik Zinciri modeli , bir Devlet makinesinin dikkatli bir şekilde kullanılması gerektiğinde kuralları ifade etmenize yardımcı olabilir, çünkü "durumu", modelin "durum" anlamıyla kısmen çakışır.

Denetleyici içindeki Komut desenini kullanmak hem Denetleyici sorumluluklarını azaltmak (Komut modelle nasıl başa çıkacağını bilir) hem de Denetleyiciye geri alma / yineleme işlevlerini eklemeyi kolaylaştırmak için yararlı olabilir .

Her durumda, tasarım desenlerini kılavuz olarak kullanmayı denemelisiniz: tekerleği, özellikle kare tekerleği yeniden icat etmekten kaçınmak için faydalıdırlar, ancak her sorunun çözümü bir araya getirilmiş bir grup (yuvarlak) tekerlekten oluşmaz.


2

En iyi ya da iyi olmaktan emin değilim ama genellikle Observer desenini kullanıyorum . Benim için yeterince iyi çalıştı.


1
Bir örnek verebilir misiniz?
Gustavo Maciel

her kural için bir gözlemci oluşturabilir, sonra bunları oyun durumuna ekleyebilirsiniz. Her turdan sonra oyun durumu tüm gözlemcileri bu kurallardan herhangi birinin uygulanıp uygulanmadığını kontrol eder.
Ali1S232

0

İşi daha önce birçok kez yapmadıysanız, her zaman spagetti koduyla karşılaşacaksınız. Aslında, bu noktada, yeni başladınız: Elinizde olan şey, bir ön spekülasyonun kaba taslağıdır. Buradaki diğer tavsiyelere göz atın ve ciddi bir yeniden yazma yapın. Ve sonra biraz daha yeniden yazma ve sonra .... Şahsen ben emin ben gerçekten büyük şekle kodumu almak ya da sadece yeniden yazmak hastaları almak ister asla değilim, ama do görünüyor sağ sonunda bunu elde etmek.

Sorunu iki uçtan ele alın. Marka anlamda genel tasarım almaya çalışın ve sap basit işleri o küçük parçalar almak ve sağ bunları yapmak. Sonra her iki uçtan ortaya doğru çalışmayı deneyin. Ve sonra ortadan her iki uca doğru çalışın. Sonra yukarıdan aşağıya, sonra aşağıdan yukarıya. Ardından tüm işlemi tekrarlayın.

Esasen, sahip olduğunuz bir sınıf koleksiyonu. Sınıf A'yı düşünün. Sınıf A iyi inşa edilmişse, onu kullanan sınıflar otomatik olarak daha iyi çalışır, ancak iyi veya kötü olurlar. A sınıfı kullanır sınıflar de, bu çok kullanılan sınıfları yapacak olursa daha Ancak iyi ya da kötü onlar vardır. Sınıflarınızı olabildiğince iyi organize edin, sonra her birinin olabileceği en iyi sınıf olduğundan emin olun.

Olabildiğince doğru bir şekilde elde etmek önemlidir. Kötü kod, attığınız güne kadar sizi rahatsız edecektir. Yazılımla, biraz ekstra parlatma her zaman işe yarar. (Kimse kodu kullanarak bitmez ....)

Özetlemek gerekirse: diğer yanıtlarda verilen asıl tavsiyelere göz atın, ardından istediğiniz bir şeyi alana kadar kodunuzu yeniden yazın.


Yani cevabınız temelde "diğer cevapları okuyun ve temiz kod yapın, yoksa pişman olacaksınız" ...
kaoD

@kaoD: Evet. Ama aynı zamanda: ilk kodlama girişiminiz muhtemelen önemsiz olacaktır. (Değilse, kendinizi yeterince zorlamıyorsunuz.) Biraz araştırma ve düşünce ile birlikte, onu bir araya getirmek çok zor bir iş gerektirecektir. İlgili bir program yazarken bu normaldir. Bu şekilde harcanan tüm çabalar, uzun vadede zaman, çaba ve kederden tasarruf sağlayacaktır (program uzun vadede hala oradaysa). Ve ayrıca: OOP asmak için büyük zaman yardımcı olur. (Kodu görmeden yapabileceğim en iyi şey.)
RalphChapin

4
Aslında soruyu cevaplamadığınızı biliyor musunuz?
kaoD

Aslında, Ralph'in gönderisinin teknik olarak bir cevap olup olmadığına bakılmaksızın, Ralph'in tepkisinin OP'nin ilk etapta soruyu sorma güdüsüyle konuştuğunu düşünüyorum. İlk denemede kodunuzu en iyi şekilde tasarlamanızın nadir olduğunu fark etmeyen bir kodlayıcı için çok değerli olduğuna inanıyorum. Ayrıca, Ralph'in deneyiminden doğmuş gibi görünen, bununla başa çıkmak için bir yaklaşım sundu.
Steve H

@SteveH Cevabının neredeyse tüm yazılım mühendisliği süreçleri için geçerli olduğunu düşünüyorum. Herhangi bir yere kopyalayıp yapıştırabilirsiniz ve uygun olacaktır.
kaoD
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.