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

Eski Blog

by Suat TUNCER 3. July 2010 11:39

Merhaba,

Daha önce şurada belirttiğim gibi, eski blogtaki yazıların tamamını buraya taşıdım. Tüm isteklerime rağmen blogcu.com ne yazıkki yazıları aktarım için bir eklendi sunmadı. Bu yüzden eski blogta yer alan yorumları taşıyamadığım için, silmek zorunda kaldım. Yazılarımın altında yorumları bulunan herkesten özür diliyorum. Giriş seviyesindeki yazıları güncel bilgilere göre düzenledikten sonra tekrar yayınlayacağım. Yeni blog açacak arkadaşlara tavsiyem, oluşturduğunuz blogda, BlogML veya OPML gibi bir veri aktarım teknolojisinin olduğundan emin olunuz.

Tags:

Personal

Doğuda Görevli Bir Doktorun Mektubuna Cevap

by Suat TUNCER 29. June 2010 10:31

        Bugüne kadar blogumda teknik ve kişisel yazılar dışında yazılar hiç yazmadım ama son zamanlarda ortalıkta dolaşan "DOĞUDA GÖREVLİ BİR DOKTORUN MEKTUBU" başlıklı yazıdan duyduğum rahtasızlığı dile getirmem gerek. Bu yazıyı yazanın bir doktor veya sadece doktor olmadığından adım gibi eminim. yine de ben ona doktor diyeceğim;

 

 


Doğuda Görevli Sevgili Doktor.


        Öncelikle, mecburu hizmetinden dolayı oraya gittiğinizden eminim. Korkularınızdan ve ön yargılarınızdan arınmadan göreve başladığınız düşüncesindeyim. Eğer böyle olmasaydı orada azda olsa güzel işler başarmış öğretmenler, sağlık personelleri hayal ürünü olurdu.


        İnanın bana bölge halkının en çok değer verdiği iki meslek grubu vardır. Birincisi doktorlar diğer ise öğretmenlerdir. Yıllarca sağlık sorunlarıyla uğraşmış, hastane ve doktora gidebilmek için kilometrelerce yol kat etmiş insanlardan bahsediyoruz. Doktor bu bölge için büyük bir nimettir, hiçbir şekilde onlara saygıda kusur etmezler ve inanın bana, sizin kıymetinizi batıdaki birçok hastanızdan daha iyi bilirler.

        Malzeme temin eden firmalar üzerinden yapılan yolsuzlukların bu bölgeye özgü olmadığını hepimiz gün gibi biliyoruz, bırakın insanları kandırmayı.  Sağlık reformu adı altında yapılan özel hastanelerin SSK'lılara bakmaya başladığı ilk dönemde, öncelik yeşil sermayenin hastanelerine verildi, az biraz aykırı görüşte yönetimi bulunan hastanelere her türlü zorluk çıkarıldı. Primlerimizle büyüttüğümüz SSK'yı soyanın kim olduğu gayet açık aslında. Son domuz gribi vakasına bakmak bile yeterli olacaktır Sevgili Doktor. Büyük şehirlerdeki hastane önü eczacılarının yaptıkları da ortada. Kimi neyle suçluyorsunuz?

     Benim zeval görmeyesice devletim her çocuğa harçlık vermeyi bıraksın da, Kars'tan Edirne'ye, İstanbul'dan Van'a her yerde kayıt parası adı altında alınan paraya engel olsun. Ayrıca bilgi olarak belirtmekte fayda var, çocuklu ailelere yardım için dağıtılan aylık tutarlar şöyledir;

  • İlköğretime devam eden erkek : 20  YTL
  • İlköğretime devam eden kız : 25  YTL
  • Ortaöğretime devam eden erkek : 35  YTL
  • Ortaöğretime devam eden kız : 45  YTL

        Bu yardım tüm Türkiye'de verilmektedir ve sadece o bölgeye özgü değildir.


        Yine benim büyük devletim, hükümetim, hükümetlerim, çitçiye eksin ekmesin memleketimin her yerinde teşvik adı altında nakit yardımı yapıyor, ne güzel. Peki, verdiği bu yardımı "bunlara para vereyim de seslerini keseyim" diye değil, adam gibi tarım reformu yapıp denetim sağlayarak vermiyor. Doğru şekilde denetimini yapsın, gör bak o zaman hiçbir gelir kalemi olmayan insanlar gelir elde edince vergilerini faturalarını nasıl ödüyorlar. Karadeniz’de tütün ve fındık kotalarındaki düşüş ortada, yakında orada da durum aynı olacak. Memleketin dört yanında vergi borcu yüzünden malına mülküne el konan çiftçiler de ortada. Demek istediğim Sevgili Doktor, vergi almanın da teşvik vermenin de bir üslubu olsa gerek bunun denetimini de devlet yapsa gerek.

        Uzun lafın kısası Sevgili Doktor, asıl vahim olan bu yazının düzmece olması değil, içindeki gizli ırkçılıktır. Bölgedeki tüm insanları "terörün" bir parçası gibi göstermek, herkesi top yekun yaftalamak, insanların üç kuruşa muhtaç yaşamasını mutluluk sanmaktır.

Suat TUNCER
Doğuda Doğmuş ve Yaşamış Biri.

 

Tags:

Personal

Elveda Türk Telekom

by Suat TUNCER 4. May 2010 16:09

Merhabalar,


 

Türkiye'de internet ve bağlı hizmetlerin önünde devasal bir engel olarak duran, Türk Telekom ile aramdaki bağları an itibariyle koparmış bulunuyorum Sanki yıllardır sırtımda duran büyük bir yükten kurtulmuş gibiyim. Tahmin edilebileceği gibi öyle kolay olmuyor kurtulmak. Kıyıdan köşeden, ucundan kenarından, mutlaka bir miktar fazla ödeme yapmak zorunda kalıyorsununuz ama olsun değiyor. 

 

Ohh be diyorum ve Superonline'a teşekkürediyorum :-)

Tags:

Personal

TFS Source Control Problemi

by Suat TUNCER 22. April 2010 13:51

Merhabalar,

Team Foundation Server 2008'de bugün çok ilginç bir sorunla karşılaştım. Daha önce Java ile Eclipse kullanılarak geliştirilecek bir proje için TFS'de sadece proje portalını oluşturmuş ve source control klasörünü daha sonra eklemiştim. TFS admin ve Project admin olduğum için source contorl'ü sorunsuz bir şekilde kullanıyordum. Takımdaki diğer üyeler, proje güvenlik ayarlarında contributer olarak ekli olmalarına rağmen source control dizinine erişemiyorlardı. Test etmek için bir bir üyeyi admin olarak eklememe rağmen source controle erişemediler. Durum oldukça ilginç. Bu sorunla daha önce karşılaşan olmuşmudur bilemiyorum ama olmuşsada ben rastlamadım. Sorunu düzeltmek için projeyi silip tekrar oluşturmak zorunda kaldım.

Team Foundation Server'da bir projeyi silmek için de aşağıdaki komutu kullanmadım, not olarak dursun kenarda;

TfsDeleteProject /server:<servername> “Project Name“

Tags: , ,

Proje Yönetimi

TFS and Eclipse IDE

by Suat TUNCER 21. April 2010 11:22
Merhabalar,

Orta ve büyük ölçekli projelerde proje yönetimi olarak TFS'ın sağladığı kolaylıklar tartışılmaz fakat yeni başlayacağımız projede .Net dışında Flex ve Java teknolojilerini kullanacağımız için proje yönetimi için yeni bir tool arayışı içerisine girmiştim fakat mevcut projelerimiz için kullandığımız TFS çok daha makul görünmekteydi. Ben de işe proje portalını oluşturmakla başladım. TFS üzerinde sadece proje portalını oluşturup, proje takvimi ve görev dağılımlarını belirledim. Buraya kadar herşey gayet güzel fakat işin içine kaynak kod yönetimi girince svn gibi ayrı bir tool daha kullanmak yerine Eclipse ve Flex Builder üzerinden team server ile konuşmak çok daha mantıklı görünüyordu.

Kısa bir araştırma sonrası, Teamprise firmasının "Team Explorer Everywhere 2010" ürünü ile karşılaştım, ürün %90 oranında TFS Client'ın ile eşleşiyor. Sadece güvenlik tanımlamlarında bir eksiklik var onun dışında oldukça başarılı bir ürün. Bu başarıyı Microsoft da görmüş olacak ki Teamprise'ı satın alıp bünyesine dahil etmiş durumda. Bu hamle Microsoftun geliştirme araçlarında, Windwos platformu dışındaki ilk haraketi olarak da değerlendirilebilir.


Ürüne gelecek olursak, Eclipse ve Eclipse temelli IDE'lerde çalışabilemtedir. Hal böyle olunca, Windows ve Linux sistemlerde de rahatça çalışa bilemketedir. Ben eklentiyi Windows7 üzerinde, "Eclipse 3.5 Galileo" ve "Flex Buidler Based on Eclipse 3.4" IDE'lerine kurup tes ettim hiç sorunsuz Team Foundation Server 2008'e bağlanabildim.

Tags: , , , , ,

Proje Yönetimi

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

İstanbul için iftar vakti

by Suat TUNCER 24. August 2009 09:17

 

İstanbul Bayrampaşa viyadüğü ve yolda parmakla sayılacak kadar az araç var. istanbulda böyle bir manzara görmek yılda bir kaç defa nasip olur. bu zamanlardan en şaşmazı da iftar vakti olsa gerek. Saat 19:55 iftara 5 dakika kala İstanbul'da trafikten eser yoktur ve Şişli-Bağcılar arası sadece 10 dakika sürmüştür.

 

 

Herkese hayırlı iftarlar :-).

 

Tags:

Personal

Generic IsDBNull Function

by Suat TUNCER 11. August 2009 16:42

Geçenlerde bir öğrencimden mail aldım, mailde bir konudan yakınıyordu, diyordu ki;

"Merhaba Hocam,

Küçük bir projeye başladım ve bu projede ORM araçlarını kullanmak yerine ADO.Net ile yazmak istedim fakat DataReader ile veri okurken verinin null olup olmadığını kontrol etmekten uygun tiplere dönüştürmekten sıkıldım bu işin pratik bir yolu var mıdır?"


.Net ile heleki C# ile uygulama geliştiriyorsanız, mutlaka her şeyin bir pratik yolu vardır, şöyleki;

static bir sınıf içerisine aşağıdaki gibi bir methodu ekleyin.

        public T ReadField<T>(OracleDataReader reader, string columnName) {
            object value = reader[columnName];
            Type targetType = typeof(T);
            if (Convert.IsDBNull(value)) {
                if (targetType == typeof(string))
                    return (T)Convert.ChangeType(String.Empty, typeof(string));
                return default(T);
            }
            else {
                targetType = Nullable.GetUnderlyingType(targetType);
                if (targetType == null)
                    targetType = typeof(T);
                return (T)Convert.ChangeType(value, targetType);
            }
        }



çağırırken ise, aşağıdaki gibi kullanmak yetecektir.


            OracleConnection connection = new OracleConnection("ConnectionString");
            OracleCommand command = connection.CreateCommand();
            command.CommandText = "SELECT * FROM SourceTable";
            command.Connection.Open();
            OracleDataReader reader = command.ExecuteReader();
            IList<Product> list = new List<Product>();
            Product item = null;
            while (reader.Read()) {
                item = new Products();
                item.ID = ReadField<int>(reader, "ID");
                item.Quantity = ReadField<string>(reader, "Quantity");
                item.UnitPrice = ReadField<decimal>(reader, "UnitPrice");
                item.Description = ReadField<string>(reader, "Description");
            }
            command.Connection.Close();



NOT : beklenmeyen tip dönüşümlerinde kodun çatlamasını istemiyorsanız try catch kullanabilirsiniz.

Edit : Method Nullable tiplerle de çalışacak şekilde güncellendi.

Tags: , , ,

C#