Author Topic: Developing  (Read 5619 times)

eren

  • Newbie
  • *
  • Posts: 1
Developing
« on: March 27, 2012, 06:09:35 am »
Merhabalar öncelikle bende bu projeyi oluşturanları tebrik etmek istiyorum. Programcılığa yeni başlayan birisi olarak Türklerin böyle büyük projeler geliştirmesi ve bunu open-source olarak sağıtması beni gururlandırdı. Geliştirme ekibinize küçük sorularım olacaktı cevaplayabilirseniz sevinirim.
Proje 5 adet layerdan oluştuğunu görüyorum. Bu layerlar ne işe yarıyor. Bunların nasıl birbirileriyle bağlantıları olduğunu açıklayabilirmisiniz. Projeyi geliştirirken OR/M toolslardan veya code generatorslardan faydalandınızmı? cache işlemleri ne zaman yapılıyor? Performansı nasıl etkiliyor. Birde networkde 3 pc aynı anda Masa 3 ü açtı diyelim. Masa 3 den 2 kişi hesabı ayrı ayrı 1. kasadan ve 2. kasadan ödemeye kalkması durumunda yazılım nasıl çalışıyor? veya aynı sistemde Kasada Masa 3 açık iken birisi hesap ödemeye gittiği anda bir sipariş daha alınması durumunda nasıl çalışıyor? Programcılığa yeni başladığım bu konuları soracak yerler arıyorum yardımcı olursanız teşekkür ederim.

emre

  • SambaPOS Developer
  • Samba Team
  • Hero Member
  • *****
  • Posts: 1564
Re: Developing
« Reply #1 on: March 27, 2012, 11:01:38 am »
eren selamlar. Projelerde çeşitli amaçlarla katmanlara ayırma işlemi yapılır. SambaPOS projesindeki amaç uygulama geliştirmeyi kolaylaştırmak için projeyi işlevsel bölümlere ayırmak ve bazı kurallar koymak. Örneğin veri yükleme, kaydetme (persistence) kodlarını barındıran katmandan görsel (presenatition) özellikleri içeren katman içindeki kütüphanelere referans bulunmaz. Veya görsel katman içinde veri iletişimini ilgiliendiren kodlar bulunmaz. Bu konuda DDD gibi güzel öneriler var ancak elbette bunlar yazılı kurallar değiller. İlk etapta örnekleri incelemek, önerileri takip etmek gerekir ancak zamanla tecrübenize göre üzerinde çalıştığınız projeyi gerekli gördüğünüz şekilde bölümlere ayırabilirsiniz.

ORM olarak entity framework kullandım. Bir code generator kullanmadım.

Bu bir restoran uygulaması olduğu için özel bir cache mekanizmasına ihtiyaç duymadık. Mesela ürün sayısı az olduğu için tüm ürünleri program açılışında yükleyip program çalıştığı sürece hafızada tutabilmek gibi bir avantajımız var. Ayrıca çalışma esnasında da ürünlerde veya fiyatlarda değişiklik yapılmıyor. Bunun haricinde verimliliği arttırmak adına programın bazı özelliklerini kullanırken uyguladığımız basit cache çözümleri de var ancak bunlar load balancing gibi uygulamalar yapmak için kullanılan standart cache mekanizmaları gibi değil.

İki terminalden aynı anda ödeme alınırsa adisyonu ilk kapatan kazanır. Eğer ödeme alınmadan yeni sipariş eklenirse ödeme iptal edilir ya da ödeme alındıktan sonra sipariş eklenirse sipariş iptal edilir. Ancak aynı anda aynı masaya iki terminalden birden sipariş alınırsa buna izin veriyoruz çünkü bazen 30,40 kişilik masalar oluyor ve iki, üç garson birden aynı anda aynı masaya el terminalinden sipariş alabiliyor. Duruma göre farklı sonuç üretmemiz gerektiği için bu tür kontrolleri veritabanı tarafında yapmadım. Tek tek olası bütün senaryolara farklı çözümler ürettik.

İşlevsel olarak henüz V2'nin özelliklerine sahip olmasa da yapısal olarak V3 sürümü daha iyi tasarlanmış bir sürümdür. Tabii her konuda detaylı bilgi vermek zor ama SambaPOS içinde standart bir iş uygulamasında karşılaşılabilecek hemen her tür problemin örnek bir çözümü bulunmaktadır. Yeni başlayan arkadaşlar için belki ilk bakışta karma karışık gelebilir ancak bu tür uygulamalar geliştirmek isteyen arkadaşların arada sırada bile olsa takip etmesi faydalı olacaktır.