31 Mart 2023 Cuma

Dönüşüm Hikayeleri 2 - Culture ile İmtihanımız

     S.A. Arkadaşlar,

    Bugün yine karşılaştığımız bir problemi ve o problemi nasıl çözdüğümüz ile alakalı birkaç nokta paylaşmak istiyoruz. Daha önce kodların çalıştığı sunucu Türkiye'de ve biz bunu Amazon Frankfurt tarafına taşıdık. Kod içerisinde DateTime.UTC kullanıldığı için ve biz bu değişiklikleri eski projedeki kodlarda yapmak istemediğimiz için ne tarz çözümleri ele aldık onu anlatmaya gayret edeceğiz. Hazırsak başlayalım.

    İlk problemimizi decimal değerler tarafında yaşadık. Gelen değerlerde virgül ve nokta farklılığı elde ettiğimiz değerlerin farklı gelmesine sebep oluyordu. Bunu köprü görevi gören aracı projemizde double için kültürü en-US olarak kullandık, decimal olan değerler için noktaları virgül ile değiştirdik. Bu geçici çözüm işimizi şu anlık çözdü.

    İkinci karşılaştığımız problem ise tarih işlemleriyle ilgili oldu. Kullanılan veritabanında tarih alanları maalesef farklı formatlarda tutulduğundan nokta atışı bir çözüm bulmamız zorlaşıyordu. Bu da yetmezmiş gibi tarih alanları UTC olarak tutulmuştu, bu Türkiye'de bulunan sunucuda sıkıntı çıkarmasa da biz sunucuyu taşıyınca hatalar gelmeye başladı.

    Bu arada bu problemlerin kötü yanlarından biri de kendi bilgisayarlarımızda yaşamayıp sunucu tarafında yaşamamızdı. Bu da uyguladığımız çözümün işe yaradığını anlamamızı zorlaştırıyordu. Sonradan kendi bilgisayarlarımızda da kültürü en-US olarak ayarlayınca bu problemleri çözerken derin bir nefes aldığımızı söyleyebiliriz.

    Sunucu farklılığından oluşan ilk hatayı koda dokunmadan sunucunun saat dilimini değiştirerek yaptık. Öyle yapınca ilk problemimizi çözmüş olduk. Çünkü bunu kodda yapmak mümkün değildi, binlerce yere dokunmamız gerekebilirdi, ki bu kodları sonradan yine değiştirmemiz gerekebilirdi, bu basit çözümü uygulayıp testlerimizi yaptığımızda hata çözülmüştü.

    Tarihlerin farklı formatlarla geldiğinden bahsetmiştik, kültür farklılığı de eklenince bu tarihleri istenilen şekle koymak bizi epeyce yordu. Yaptığımız araştırmalar sonucu "TryParseExact" kullanmaya karar verdik. Bu işimizi gayet kolaylaştırdı, fakat tek başına çözüm olmadı, çünkü gelen formatlar farklı olduğundan her birini bulmak gerekiyordu. Saat gösteriminin 12 mi 24 mi olması bile önemli hale gelmekteydi. Şöyle ki, bir problem sonucu kayıtları incelerken saat 12'den sonra gerçekleşen kayırların bozuk ama sabah yapılan kayıtların düzgün olduğunu fark ettim, meğer formatı "hh" ile birlikte "HH" olarak da ele almamız gerekiyordu. O problemi de öyle çözdük. Ayrıca gelecek farklı formatlar için "TryParse" metodunu da kullandık, ayrıca gelen tarihi de log'layarak gelebilecek hatada en az zararla çıkmayı planladık. Bu arada bu değişikliği "Utils" sınıfı altında genel metodlarımızda yapıyoruz. Bu sayede bütün projede değişiklik yapmaktan da kurtuluyoruz.

    Şimdilik aklımıza gelen ve kültürel değişiklikler yüzünden karşılaştığımız hatalar bu şekilde. Bakalım yarınlar bize daha ne tecrübeler gösterecek...

    Yazıyı farklılıkları ele alan bir ayet-i kerime ile bitirelim.

“Ey nas!/ey insanlar! Hiç şüphe yok ki, biz sizi bir erkek ve bir kadından yarattık(yani siz hepiniz aynı ana ve babanın meydana getirdiği ailenin çocuklarısınız). Bununla beraber sizi değişik milletlere/ kavimlere ve kabilelere ayırdık ki, karşılıklı olarak birbirinizi tanıyasınız"(Hucürat, 49/13).

Hiç yorum yok:

Yorum Gönder