.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
|
|