Makale Özeti

Mevcut yatırımlarınız için .NET ne anlama geliyor ? Eski yatırımlarınız öldü mü ?

Makale


.NET kavramı ile tanışan, ve bu yeni Microsoft atılımı ile karşılaşan pek çok kişinin aklında benzer sorular oluşuyor. Bu ortak soruların yanı sıra ortaya çıkan bir başka ortak durum da .NET i tam olarak kavrayamamaktan kaynaklanan yanlış anlamalar oluyor. Bir çok programcı için .NET oldukça hoşa gidecek yenilikler içeriyor. Ancak unutmamamız gereken nokta, .NET in sadece teknik anlamda gerçekleştirilmiş birkaç yenilikten ziyade Microsoft tarafından uzun çalışmalarla ortaya çıkan yepyeni bir vizyon olduğu. Bu yazıda sizlerle birlikte IT yöneticileri ve mevcut Microsoft teknolojileri ile yatırımlarının geleceğini düşünen herkes için .NET in ne anlama geldiğini incelemeye çalışacağız.
Bir IT yöneticisi açısından yeni bir teknoloji , bir programcıya göre daha farklı anlamlar taşır. Bir programcı için bir işi daha kısa zamanda daha verimli, daha yüksek bir performansla ve tabii ki daha kolay yapmak her zaman tercih edilecek bir durumdur. Ancak yeni duyurulan bir programlama aracı veya dili, belki de bir programcının gözlerinin ışıldamasına sebep olurken, bir IT yöneticisi için durum daha karmaşık olabilir. Programcılar kod yazmaktan sorumlu kişiler olarak genelde yenilikleri bu perspektiften değerlendirme alışkanlığına sahiptirler. Ancak IT yöneticileri için ortada düşünülmesi gereken maliyet, ve mevcut yatırımların verimliliğin korunması gibi noktalar da vardır. İsterseniz biraz daha somut bir tarz ile devam etmeye çalışalım, ve bu yazıda tartışmaya çalışacağımız COM, COM+, DCOM gibi kavramları da işin içine katalım.
Eğer Microsoft teknolojileri üzerinde çalışan bir sistemden sorumlu bir yönetici iseniz, bu kavramlar size oldukça tanıdık gelecektir. COM , yani Component Object Model, uzun zamandır yazılım dünyasının gündeminde olan ve doğumunu izleyene 8 yıl civarında bir süre boyunca sürekli evrim geçiren bir teknoloji. Yazı boyunca mümkün olduğunca kolay bir anlatım sağlamak açısından , .NET öncesi teknolojileri COM genellemesi ile adlandıracağız, ancak bu kısaltma ile COMu izleyen, .NET e kadar tüm teknolojileri de kastediyoruz.

Oldukça uzun sayılabilecek ömrü boyunca COM hemen her tür işletmede kendine uygulama alanı bulmuş bir kavram. Özellikle Visual Basic gibi hızlı yazılım geliştirme araçları sayesinde COM, ve ona dayalı teknolojiler büyük bir hızla gelişti ve yayıldı. Ancak kurumlar arasındaki entegrasyon ve rekabetin artması ile birlikte bu teknolojilerin evrimi üzerindeki baskı da arttı. Artık yazılım geliştiricilerden ve dolayısıyla IT yöneticilerinden beklenen şey, daha hızlı ortaya çıkan projeler, mevcut standartlarla daha kolay entegrasyon ve daha yüksek verimlilik oldu... Bu durumda bu teknolojileri ortaya çıkaranların da işi oldukça zorlaştı. Üzerinde milyonlarca satır kod yazılmış , ve dolayısıyla milyarlarca dolar yatırım yapılmış teknolojileri bir çırpıda bir kenara atamazsınız. Bir yandan da geriye dönük uyumluluğu ihmal etmeden sürekli artan ihtiyaçları karşılayabilecek yeni çözümleri sunmanız gerekiyor. .NET bu anlamda gerçekten çok iddialı bir adım. O kadar fazla yenilik içeriyor ve o kadar fazla şey vaat ediyor ki, pek çok yöneticinin kafası karışıyor, doğal olarak ortaya çıkan sorular yanlış anlamalara dönüşüyor.
Dilerseniz bir parça teknik detaylara da yer vererek .NET öncesi ve sonrası sizin için ne anlama geliyor bir bakalım.
.NET hakkında yanlış anlamalar :
NET bir devrimdir ve eski teknolojiler ile alakası yoktur.
Yanlış! .NET aslında bir devrimden çok, COM ve ilgili bir çok teknolojinin evriminde atılmış çok büyük bir adımdır. Ancak o kadar fazla yenilik içeriyor ki, ister istemez kendisinden önceki teknolojileri öldürecek bir çözüm gibi görünüyor.Ancak .NET kesinlikle bu amaç için yaratılmış bir kavram değil. .NETin temelinde yeni fikirlerin yanısıra, her zaman kullanılan yöntemlerin daha verimli bir şekilde yeniden şekillendirilmesi de yatıyor. Bu noktayı ufak bir örnekle açalım:
COM neyi amaçlar ? En basit yanıt şu olur sanırım, "yazılım bileşenlerinin verimli bir şekilde yeniden kullanılabilmesini.." Bu cümle bir programcı için bir kodu yeniden yazmaktan kurtulmak demektir. Bir IT yöneticisi için ise, bu kodu yeniden yazmanın gerektireceği zaman ve maliyetten kurtulmak demektir. Yani projenizin bir noktasında size gereken bir yazılım bileşenini bir programcınıza baştan yazdırmak yerine gidip denenmiş, performansı kanıtlanmış bir bileşeni elde edip, projenizi çok daha sağlam ve ucuza sürdürebilirsiniz.( elinizin altında Microsoft un verdiği bir XML parser varken oturup kendinizinkini mi yazacaksınız ? )Peki .NET in bu açıdan önemi nedir ? .NET şu anda yaygın olarak kullandığımız Microsoft teknolojilerindeki bir çok eksiği kapatıyor, ve programcıların işini çok büyük ölçüde kolaylaştırıyor.
.NET i tanımlayan belki de en temel unsurlardan biri entegrasyon. Sadece yazılım bileşenleri arasında değil, teknolojiler ve hatta programlama dilleri açısından da çok güçlü bir entegrasyon söz konusu. Üstelik bu yeniliklerin çoğu .NET Framework tarafından otomatik olarak gerçekleştirildiği için programcılar zamandan, yöneticiler ise maliyetten kazanıyorlar. Tabii ki IT alanında önemli kararlar veren birisi için tek önemli avantaj zaman değildir. Projenizde kullanacağınız diller de bir başka önemli konudur . Diyelim ki sunucu taraflı bir mekanizmayı da içeren geniş bir proje üzerinde çalışıyorsunuz. Web sunucunuz üzerinde çalıştıracağınız bir yazılım için de COM+ dllleri yazmanız gerekiyor. Peki bu dll için hangi dili tercih edeceksiniz ? Eğer Visual Basic yönünde tercih kullanırsanız, programcılarınız Visual C++ ve ATL (Acitve Template Library) e göre daha hızlı bir şekilde dll i yazabilirler. Ancak ilerde web sunucunuza binen yük artınca, VB ile hazırlanan dllin multithreading açısından yetersiz kalması, projenizin ölçeklenebilirliğini düşürecektir.
Bu durumda ya yeniden bir dll hazırlayıp projenizde gerekli değişiklikleri yapacak, ya da en baştan Visual C++ ı kullanacaksınız. Bu durumda da muhtemelen projenin maliyeti ve geliştirme süresi artacaktır. ( VC++ ile ATL kullanarak COM+ dllleri yazdıracağınız bir programcıyı, bir VB programcısı ile aynı ücrete çalıştıracağınızı ummuyorsunuz değil mi ? ) Eğer ilerde web sunucusun yükü artmazsa, bu kısmın maliyetini gereksiz yere yükseltmiş olursunuz.
Gördüğünüz gibi COMun tanımı her ne kadar belli de olsa, onu kullanırken yapacağınız seçimler sizin açınızdan büyük önem taşır.
İşte bu noktada .NET in sağladığı entegrasyon size çok daha rahat karar verme, ve ölçeklenebilir projeler yaratma olanağı sağlıyor. Nasıl mı ? .NET Framework ile gelen class libraryler ( ki onları winapi yerine geçecek yeni kütüphanler olarak düşünebiliriz.) tüm dillere eşit seviyede açık. Yani önceden projelerinizde sizi zorlayan, ve kararlarınızı etkileyen bir çok sınırlama tarih oluyor.Bunun ne kadar önemli bir değişiklik olduğunu bir düşünün, artık yüksek performans için C++ veya hızlı ve kolay yazılım geliştirmek için VB gibi seçenekler yok. Artık bir VB programcısı önceden gerçekleştirmesi mümkün olmayan işlere imza atabilir, veya Visual C++ ile çalışan bir geliştirici çok daha hızlı yazılım geliştirebilir. Bunlar nasıl olacak diyorsanız, yazgelistir.com daki diğer makalelere biraz göz atmanızı tavsiye ederim, bu yazılarda teknik konular ile ilgili bir çok detayı bulabilirsiniz..
COM ve onu izleyen teknolojilere göre .NET in bir başka artısı ise teknik altyapısının tamamen platformdan bağımsız olacak şekilde tasarlanmış olması. Şimdi gelelim hemen herkesin aklına gelebilecek bir diğer soruya: .NET bunca avantajı yanında getiriyor, ama elimizdeki COM veya DCOMa dayalı yatırımlar ne olacak ?
.NET bu konuda sanılandan çok daha fazlasını sağlıyor. Oldukça merak edilen bir konu olduğu için bu konuda ayrı bir başlık fena olmaz sanırım :

.NET ve COM ilişkisi
Getirdiği yenilikler sebebi ile COMun ölüm meleği olarak anılması, herhalde .NET ile ilgili en büyük yanlış anlamalardan birisidir. İlk görüşte .NET in sahip olduğu avantajları gören hemen herkesin yorumu, COM bitti, artık .NET varken kim Com kullanır ki oluyor. Eğer sıfırdan başladığınız projenizin önceden yazılmış kodlarla ve mevcut yatırımlarınız ile hiçbir ilişkisi olmayacaksa bu yorum dikkate alınabilir, ama gerçek hayatta bu durumla karşılaşma şansınız ne kadar ? Sizin de tahmin edeceğiniz gibi oldukça düşük.
Peki size .NET in COM ile yazılım geliştirmek için son derece güçlü olanaklar sağladığını söylesem ? Şaşırtıcı gibi görünse bile aslında çok mantıklı, nasıl bugünlerde çalışır durumda milyonlarca satır COBOL kodu varsa, aynı şekilde bu güne kadar yazılmış COM tabanlı bir çok yazılım da kullanılmaya devam edecek. Bu yazılımları geliştirmek veya bu yatırımlarınızla birlikte çalışacak yeni projeler hazırlamak isterseniz .NET sizlere gerçekten çok sağlam olanaklar veriyor. Biraz daha detaya girelim isterseniz.
Diyelim ki, COM temelli bir projenize yeni bir katman eklemeniz gerekiyor. .NET in yazılım geliştiricilere sağladığı kolaylıklar da programcılarınızın rüyalarına giriyor. Bir yanda kazan kaldırmaya hazırlanan programcılarınız, öte yanda baştan aşağı COM ile kurulmuş yatırımınız. Eğer tüm yapıyı sıfırdan .NET ile kurarsanız, kaybedeceğiniz zaman ve mevcut işlerdeki aksama kabul edilemez. Mevcut geliştirme araçları ve COM u seçmek tek yol gibi görünüyor, ama değil: programcılarınız .NET ile çok daha hızlı ve verimli çalışıp, elde ettikleri yazılım bileşenlerini hiçbir çaba harcamadan COMa aktarabilirler! Veya .NET ile yazılacak yeni bir projenin içinden COM bileşenlerine kolayca erişip onları kullanabilirler.Bu bahsettiğim olanaklar .NET ile birlikte size sağlanmış durumda ve sizin uğraşmanız gereken detaylar inanılmaz seviyede az.
İsterseniz yazdığınız kodu bir COM server olarak kullanabilir, veya bir COM serveri için tamamen .NET ile bir client yazabilirsiniz. Her iki durumda da .NET size gerekli wrapplerları sağlayaktır. Karşımıza çıkabilecek örnek durumları kısaca inceleyelim.

.NET ile COM objelerini kullanmak:

yeni yazılımlarınız COM bileşenleri ile haberleşmek veya onları kullanmak istediği zaman bunu bir RUNTIME-CALLABLE-WRAPPER (RCW) ile yapacaklar.


(pek güzel bir şekil olmadı ama idare eder :)
Visual studio.NET ile çalışırken tek yapmanız gereken projenizin referanslar kısmında COM objelerini seçmek. İnanmadınız mı ? O zaman bir screenshot görelim:


Eğer visual Studio.NET ile tanışma şansınız olmadı ise, TlbImp.exe isimli tool sayesinde aynı işi .NET Framework sdk ile de yapmak mümkün. Bu basit işlem sayesinde COM objeniz bir .NET class olarak emrinize amade sizi bekliyor oluyor. Daha önce COM objeleri ile alt seviyede (C++)çalışan herkesin de bileceği gibi onlarla konuşmak pek de eğlenceli değildir, RCW sayesinde bu objelere birer .NET class olarak erişmek pek çok programcıyı oldukça mutlu edecektir. Bu sayede .NET in arka planda sizler için harcadığı çaba sayesinde COM için geliştirme yaparken daha hızlı çalışmanız da mümkün.

COM ile .NET objelerini kullanmak
Bu senaryoda ise COM-CALLABLE-WRAPPER (ccw) sayesinde .NET ile çalışarak COM objeleri oluşturabiliyorsunuz.


Bu sayede COM ile iletişim kurmanız gereken durumlarda hiçbir aksaklık olmadan .NET ile çalışmanızı sürdürebilirsiniz. Burada anlattığım konuların teknik detay gerektirdiğinin farkındayım, ama bu yazıyı fazla karıştırmamak için bunları başka bir yazıya bırakalım.
COM ve .NET objeleri arasında o kadar sağlam bir iletişim var ki, yukarıda bahsettiğim wrapperlar tamamen farklı iki hata yönetimi sistemi arasında bile gerekli uyumu sağlıyor. COM hataları belirlemek için fonksiyonlardan dönen kodları kullanırken, .NET exception handling üzerine kurulu bir error handling mekanizması kullanıyor. Bu wrapperlar sayesinde bir hata kodu bir exceptiona veya bir exception bir hata koduna otomatik olarak çevriliyor.

ActiveX ve .NET
.NET ile birlikte tanıştığımız windows forms sayesinde activeX kontrollerinin karşılığı olarak görebileceğimiz windows forms control kavramı da karşımıza çıkıyor, ve tahmin edeceğiniz gib .NET ile gelen wrapperlar bu kontrolleri birer activeX kontrolüne çevirebiliyor. Aynı şekilde şu anda yazılmış sayısız activeX kontrolü de .NET altında kolayca kullanılabiliyor. İsterseniz şu ana kadar incelediğimiz noktaları bir parça derleyip toplayalım.
  • .NET yazılım geliştirme sürecinde verimi ve esnekliği artıracak bir çok olanak sağlıyor.
  • .NET ile yazılım geliştirmek için COM ile gerçekleştirdiğiniz yatırımlarınızdan vazgeçmek zorunda değilsiniz. Aksine .NET sayesinde mevcut altyapınızı değiştirmeden yeni projelerinizi tasarlayabilir, ve COM temelli yazılımlarınızı uzun süre kullanabilirsiniz.
  • COM ve .NET arasında gerekli iletişim .NET tarafından otomatik olarak sağlanıyor ve size gerçekten fazla bir iş düşmüyor.
Bu temel noktalar etrafında bir parça düşünürseniz, .NET i mevcut yatırımlarınızı çöpe atmanızı gerektiren bir yenilik yerine, onları daha verimli değerlendirmenizi sağlayan bir fırsat olarak görebilirsiniz. Bir yöneticinin stratejik kararları doğru olarak verebilmesi için değerlendirdiği faktörler hakkında mümkün olduğunca fazla bilgiye sahip olması önemli bir gereksinimdir. Bu kısa giriş yazısı ile .NET hakkında genelde oluşan bazı yanlış yargıları bir parça da olsa ortadan kaldırabildiğimi umuyorum. Bu yazıyı temellerinden uzaklaştırmamak amacıyla yer vermediğim kod örnekleri ve daha somut çalışmaları ayrı bir yazıda ele almak istiyorum. O zamana kadar, ( ki fazla uzun süreceğini sanmam :) .NET üzerinde biraz daha çalışmanızı tavsiye ederim. Detaylarına indikçe çözüm üretmek için size sunulan bir çok yeni olanağı bulacağınıza eminim. Bir başka yazıda görüşmek üzere...

Şeref Arıkan Chibakiller@yahoo.com