GithubHelp home page GithubHelp logo

architecturetest's Introduction

Bu proje aşağıda belirtilen kararlara bir örnek olarak tasarlandı.

  • Componentler olabildiğince kendiyle ve child'larıyla etkileşim halinde olacaklar. Dışarıdaki objelerle iletişimleri olmamalı.

  • Sabit datalar singleton ya da static varlıklar yerine scriptable objelerle tutulabilir. Bunun temel faydası prefablara dahi inspector üzerinden aktarılabilmeleridir.

  • Varlıklar birbirlerini dinleyerek etkide bulunmalılar. Direk tanıyıp kullanma durumları pek sağlıklı değildir.

  • İnterface'ler ilgili kısımlarda bulunacaklar. Daha genele hitap edenler için özel yer açılacak.

  • Component'ler data tutanlar ve işlem yapanlar olarak ikiye ayrılacaklar. Data tutanlara data, mantık bulunduranlara da system denecektir.

  • System'lar iletişimleri sadece ortak data noktalarıyla yapacaklar. Birbirlerini aynı obje üzerinde bulunsalar dahi tanımayacaklar.

  • Update start gibi metotlar içerisinde kullanılan metotların adedine dikkat edilmeli. Muhtemelen orada kullanılan metot adedi o sınıfın sorumluluğuyla doğru orantılı.

  • Unity tarafından sağlanan componentlerle ilgili işlemler için ilgili component'ten türeyen system'lar oluşturulup yaratılan işlemlerin ilgili dataları dinlemesi sağlanabilir.

  • Hiç bir dış gameobje componentler tarafından bilinmemeli. Tüm işlemler yaratılan componentlerin dataları dinlemesiyle sağlanmalı. Örneğin bir objenin aktifliğini değiştirmek için o obje ilgili sınıfa aktarılmamalı, bunun yerine o obje üzerine aktifliğini set eden bir system yerleştirilip ilgili dataları dinlemesi sağlanmalı.

  • Hiç bir system public olan hiçbirşeye sahip olmamalı. Public yapma eğiliminde olduğumuz değişkenler çok yüksek ihtimalle ortak data noktalarında barınması gereken değişkenlerdir.

  • Bir system içerisinde bir şekilde başka bir system'ın sorumluluğuna ihtiyaç duyularsa yüksek ihtimalle soyutlama ihtiyacı vardır. Genel yapı tekrar gözden geçirilmelidir. Hiç bir şekilde o niteliğin olduğu componente bağlanılıp o method public yapılarak kullanılmamalıdır.

  • Sistemlerin datayı tutan sınıfları awake ya da start içerisinde bir değişkene aktarmaları gerekir. Kod içerisinde bir bağlantı yaratmak iyi değildir.

  • Bir entity üzerindeki birden fazla sistem başka bir entity'e ait bir datayı dinlemesi durumunda bu datayı dinleyen sistemlerin olduğu entity'nin data sınıfına diğer entity'nin o datasına göre güncellenecek bir data eklemek mantıklı olabilir. (?)

  • Bir sistem tanıması gereken prefabları inspector içerisinden kendine özel olarak alacaktır. Bu işlemin ortak data noktalarıyla bir alakası yoktur.

  • Her işlem sınıfı (system) monobehaviour olmalıdır.

  • System'ler içerisinde bir yerden fazla kullanılan matematiksel veya kıyaslama gibi işlemler static ve içsel durumu olmayan sınıflar içerisinde barındırılmalı ya da Monobehaviour olmayan sınıflarda geliştirilip gereken sınıfları conseptleriyle el yapımı bir ioc container ile aktarılmalıdırlar. İkincinin daha sağlıklı olduğunu düşünüyorum fakat overachitecture'a kaçma ihtimali var.

  • Oyunun genel akışıda daha küçük sistemlerin çalışması gereken zamanlara karar verme yöntemimiz olan bir datayı dinleme yoluyla sağlanmalı. GameFlow adında bir enum tipinde değişken yaratılıp bunun değişme zamanları ilgili bölgeler tarafından dinlenebilir.

  • Yukarıda belirtilenlerin getireceği önemli faydalardan biriside manager ihtiyacını ortadan kaldırmasıdır. Çünkü her işlem birimi çalışması gereken zamanı bir datayı takip ederek bulacaktır.

architecturetest's People

Contributors

yasir700 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.