Best Practice for Session Keys

by Suat TUNCER 8. July 2010 11:37

Merhabalar,
Geliştirdiği projelerinin ölçeği büyüyen ve yönetilebilmesi daha kolay uygulamalar geliştirmek isteyen arkadaşlara yardımcı olacağını düşündüğüm ve geliştirdiğim projelerde uyguladığım genel yaklaşımları vakit buldukça paylaşmayı düşünüyorum. Bunun için ilk “Best Practice”imi aşağıda bulabilirsiniz :)


Web uygulamaları ile çalışırken, çoğunlukta web mimarisinden kaynaklı bazı sıkıntılar yaşarız. Özellikle nesnelerin durum bilgilerini saklamak, içerikler arasında veri paylaşmak ciddi bir problemdir. Bu gibi işler için session state, query string, application state gibi key-value yapısıyla çalışan nesneleri kullanırız. Bu nesneler aslında web uygulamalarında yönetilmesi en sıkıntılı kısımlardan biridir. Uygulamadaki tüm içeriklerin application state içerisinde bir nesneye, kullanıcı oturumundaki tüm içeriklerden aynı session statede bulunan nesneye erişmek isteriz. Hele ki birden fazla developer ile uygulama geliştirdiğimizde kullanacağımız keyler çok daha dikkatli seçilmelidir. Bir içerikte oluşturulan "liste" adında genel bir ismin başka bir içerikte yine tanımlanma ihtimali yüksektir.   
Geliştiriciye düşen en büyük sorumluluk ise uygulamanın tamamında kullanılan session nesnelerinin nerede oluşturulduğunu ve isimlerinin neler olduğunu takip etmesi.  Bu yüzde işi şansa bırakmak yerine uygulamada tüm anahtarlar için sabitler tanımlamak çok daha akıllıca olacaktır.  Session yönetimi için aşağıdaki örnek incelenebilir.  Session yönetimini kolaylaştırmak için ilk yapılması gereken bir SessionKeys sınıfının tanımlanması olacaktır.

/// <summary>
/// internal tanımlanma sebebi,
/// tanımlandığı assembly dışında erişilmesini engellemektir.
/// eğer uygulamanın core yapısı farklı bir assemblyde yer alacaksa
/// public tanımlamak gerekecektir.
/// seald tanımlanma sebebi inherit edilmesini engellemektir.
/// </summary>
internal sealed class SessionKeys {

    // inctance alınması engelleniyor.
    private SessionKeys() { }
     
    /// <summary>
    /// oturum açmış kullanıcı'nın ID bilgisi
    /// </summary>
    public const string USER_ID = "BD9E5B0E";

    /// <summary>
    /// Kullanıcının tercih ettiği arayüz dili.
    /// Oturum açmış veya açmamış kullanıcı için de kullanılabilir.
    /// </summary>
    public const string CURRENT_LANGUAGE = "F00EA524";

}




Herhangi bir içerikte, session nesnelerine kullanmak için yapılması gereken;

// değer atamak için
Session[SessionKeys.USER_ID]=123;

// değer okumak için
object value = Session[SessionKeys.USER_ID];


Görüldüğü gibi tüm session anahtarları SessionKeys üzerinde tanımlandığında, projedeki tüm içeriklerde sessiona bir nesne atılacağında ve ve/veya bir nesneye erişilmek istendiğinde SessioKeys sınıfında tanımlı anahtarlar kullanılacaktır. Bu sayede aynı session anahtarı farklı yerde, farklı bir amaç için kullanılmasının önüne kısmen de olsa geçmiş olduk. Diğer bir örnekte query stringler için olacaktır. Web uygulamalarında en çok kullanılan yapılardan biri de query stringlerdir, en azından MVC dışındaki yaklaşımlarda bu böyledir. Burada yine bir QueryStringKeys sınıfı tanımlamak işimizi kolaylaştıracaktır. Query String gönderirken ve erişilirken kafamız rahat edecektir.


Bu yaklaşım sadece Asp.Net için değil farklı platformlarda geliştirilmiş tüm web applicationlar için uygulanabilir.

Tags: , ,

Best Practices

Asp.Net vs JSF

by Suat TUNCER 7. April 2010 21:22
SUN Micro System, Oracle, IBM, Redhat gibi büyük firmalar, Open Source toplulukları, üniversiteler ve araştırma laboratuarları JSF'i ASP.Net'den çok daha fazla desteklemektedirler ama endüstriyel alanda Asp.Net çok daha fazla kullanılmakta ve çok daha fazla kullanıcıya sahip kitleler tarafından destekelenmektedir.

Bunun en büyük sebeplerinden biri, Microsoft'un pazar payının yukarıdaki tüm firmalardan daha fazla olmasıdır demek başarısızlığın farklı bir biçimde dile getirilmesidir.

Tags: ,

Teoriler

HighCode B2C Project

by Suat TUNCER 12. December 2009 11:35

Merhabalar,

HighCode B2C Projesinin startını vermiş bulunmaktayız. Proje ilk haliyle standart bir e-ticaret portalı ve yönetim arayüzünden oluşmaktadır. Öne çıkan yeteneklerini sıralamak gerekirse;

  • Ürün Yönetimi (Kategori, özellik, stok durumu, alış-satış fiyatları vergi oranları vs..)
  • Kullanıcılar ürünler hakkında yorumlar ve değerlendirmelerde bulunabilir. Tüm bu yorumlar yönetim panelinden yönetilebilir.
  • Üye/Kullanıcı Yönetimi.
  • Üye listeleri oluşturabilme. (Fiyat alarm listesi, stok alarm listesi,alış veriş listesi)
  • Sipariş Yönetimi. Yönetim panelenden, siparişleri durumu anlık olarak takip edilebilir, düzenlenebilir ve iptal edilebilir.
  • Kargo Yönetimi.
  • Marka Yönetimi.
  • Vitrin Düzenleme. Anasayfa, kategori sayfaları, gelecek ürünler, özel ürünler ye gelen ürünler için vitrin ürünleri seçebilme.
  • İndirim Tanımlama. Belirli tarih aralıkları için, yüzde, indirim tutarı veya indirimli fiyat biçiminde indirim tanımlayabilme.
  • Reklam Yönetimi. Kategoriye özgü reklam tanımlayabilme.
  • Sanal POS Yönetimi. Kullanılan her banka için ödeme noktası tanımlayabilme. Bir banka için birden fazla ödeme noktası tanımlayabilme.
  • Taksit/Peşin fiyatına taksit, sınırsız taksti ve vade oranları tanımlayabilme.
  • Banka ve Banka Hesapları Yönetimi
  • Çoklu para birimi desteği.Otomatik doviz kuru güncelleme.
  • Kategoriye göre, çok satan ürünler,
  • Kategoriye göre,en çok ziyaret edilen ürünler
  • Rastgele ürün gösterme.
  • Mini sepet.
  • Tema Desteği
  • Sayfa üzerinde görünen tüm panellerin yönetimi.
  • Panel yerleşim yerlerini, görünür görünmez durumlarını düzenleyebilme.

 HighCode B2C projesinde kullanılan teknolojiler ve öne çıkan özellikleri şunlardır ;

  • Projesinin geliştirilmesinde 3rd Party hiç bir tool kullanılmamıştır. Kullanılan tüm araçlar HighCode geliştrme araçlarıdır.
  • Microsoft .Net Framwork 3.5 ile kodlanmıştır.
  • WEB Teknolojisi olarak Asp.Net ve AJAX tercih edilmiştir.
  • Veritabanı bağımsız çalışmaktadır. İstenilen veritabanı üzernde çalıştırılabilmektedir. (Varsayılan Microsoft SQL Server 2005'dir) 
  • HighCode Framework V2.0 kullanılmıştır.
  • HighCode Oobo O/RM Framework V2.0 kullanılmıştır.
  • HighCode Web Control Library 1.0 kütüphanesinde yer alan ve tamamen performans için tasarlanmış görsel araçlar kullanılmıştır.

Bu haliyle HighCode B2C yeni güncellemelerle birlikte farklı ERP yazılımlarının entegrasyonuna da olanak verecektir.

canlı demo için http://store.highcode.org adresini ziyaret edebilrisiniz.


Tags: , , , , ,

HighCode

Asp.Net MVC Framework

by Suat TUNCER 14. October 2008 10:56
İsim şahane acayip çekici işin içine bir MVC patterni eklenince dayanamıyor insan ağzı sulanıyor fakat madalyonun öteki yüzü böyle değil.

Yeni projemizi MVC paternini uygulayarak geliştirmeye karar verdik ve nede olsa "yabancı" değildir diye microsoft cephesinden Asp.Net MVC Framework'ü incelemeye başladık mamahif indirdiğim sample ile yüklediğim sürüm arasındaki kodlarda bile farklıklar var. Controler methodlarında ciddi değişiklikler yapılırken bir obsolute veya beta attribute bile kullanmadan iterasyonu yapılmış. beta olarak lanse edilsede bu ürün, bence gelişimi için uzunca bir zamana daha ihtiyacımız var.

Ayrıca ne olacak bu web'in Microsoft'tan çektiği. Web uygulamları geliştirme konusnda web formlar ile çok farklı bir yaklaşım getirmişti ki  çok değil geçen senelerde browser application adıyla WPF 'dan bahsetmeye başladı. Şimdide tekrar bir değişiklik ile Asp.Net MVC. tamam güzel hiç birini iptal etmiyor hep üzerine katıyor ama her biri biraz eksik kalıyor. Artık birini mükemmelleştirmeli diye düşünüyor ve buradan bizzat kendilerine sesleniyorum :-).

Bir web teknolojisi istiyorum.

  • OOP olsun.
  • Hafif olsun
  • Modellemesi kolay olsun
  • Zengin olsun.

Tags: ,

Asp.NET