Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015
KONU BAŞLIKLARI 1. Yazılım Mimarisi nedir? 2. Yazılımda Karmaşıklık 3. Üç Katmanlı Mimari nedir? 4. Üç Katmanlı Mimari nin katmanları nelerdir? 5. C#.NET üzerinde Üç Katmanlı Mimari nin yazılımsal yapısı 6. Yazılımı Üç Katmanlı Mimari yi kullanarak geliştirmekle kullanmadan geliştirmek arasındaki farklar
YAZILIM MİMARİSİ NEDİR? Bir yazılımın veya bilgisayar sisteminin yazılım mimarisi demek sistemi oluşturan yazılım bileşenleri ve görünür dış özellikler ile bunlar arasındaki ilişkiler demektir. Bilgisayar mühendisliği ve yazılım mühendisliğinde karmaşıklık önemli bir konudur. Mühendisler önceleri bu sorunu düzgün veri yapılarını kullanarak aştı. Ancak 1980'lerden beri yazılım mimarisi yazılım mühendisi öncüleri tarafından kullanılmaktadır. 1990'lardan itibaren tasarım şablonları, formal dilleri vb. geliştirildi.
YAZILIMDA KARMAŞIKLIK NEDİR? Yazılımda karmaşıklık, bir yazılımı geliştirirken karşılaşılacak zorlukları ifade eder. Bu zorluklar 2 türlüdür: 1. Yazılımı geliştirirken yaşanan zorluklar 2. Yazılımın performansı konusunda yaşanan zorluklar
YAZILIMI GELİŞTİRİRKEN YAŞANAN ZORLUKLAR Problemin Karmaşıklığı: Bir yazılımın ne tür ihtiyaçları karşılayacağı problemin karmaşıklığını ifade eder. Bu ihtiyaçları karşılamak için yazılımda gerekli iyileştirme ve geliştirmelerin yapılması gerekir. Böylece sorun çözülecektir. Yazılım geliştirme sürecini yönetme güçlüğü: Yazılım geliştirme süreci, saha araştırması, analiz, planlama, geliştirme ve test gibi aşamalardan oluşur. Deneyimli bir ekip lideri ve işlerinde uzman bir yazılımcı ekibiyle bu sorunun üstesinden gelinecektir.
YAZILIMIN PERFORMANSI KONUSUNDA YAŞANAN ZORLUKLAR Performans ve kaplanan alan açısından karmaşıklık: Performans açısından karmaşıklık, bir yazılımın kullanımı sırasında kendisinden beklenen görevleri yerine getirirken ne kadar süre harcadığını ifade eder. Bunun ifadesi için döngüsel karmaşıklık(cyclomatic complexity) ve büyük O notasyonu O(n) kullanılabilir. Döngüsel karmaşıklık: Bir yazılımın herhangi bir işlevini çalıştırmak için bir harekette bulunduğumuzda bu işlevi yerine getirirken bir kod parçacığını kaç kere çalıştırdığımızla alakalıdır.
YAZILIMIN PERFORMANSI KONUSUNDA YAŞANAN ZORLUKLAR Büyük O notasyonu: Büyük O notasyonu O(n) ile ifade edilir. N tane verinin işlenmesi için N cinsinden kaç komutun yerine getirilmesi gerektiğini ifade eder. Örnek olarak bir bubblesort sıralama algoritmasını düşündüğümüzde n tane sayının sıralanması için n2 kadar yer değiştirme yapılması gerekir. Bu da bizim notasyonumuzun O(n2) olduğunu gösterir. Kaplanan Alan Açısından Karmaşıklık: Bir yazılımda belli bir işlevin yerine getirilmesi için kaç satır kod yazdığımızla veya kod satırı üzerinde belirttiğimiz algoritmanın ne kadar uzun olduğuyla alakalıdır.
YAZILIMIN PERFORMANSI KONUSUNDA YAŞANAN ZORLUKLAR Kaplanan Alan Açısından Karmaşıklık: Bir yazılımda belli bir işlevin yerine getirilmesi için kaç satır kod yazdığımızla veya kod satırı üzerinde belirttiğimiz algoritmanın ne kadar uzun olduğuyla alakalıdır. Bilgisayar dünyasında her ne kadar büyük yer kaplayan disklerin ortaya çıkmasıyla alan açısından problem azalmış gibi görünse de büyük yazılımlar geliştirildiği, verilere milyonlarca kişinin ulaştığı, her ay milyarlarca veri üzerinde değişiklik yapıldığı ve bunlar için çok büyük veri merkezleri(data center) kurulduğu düşünüldüğünde oldukça önemli bir kavram halini alır. Çeşitli yazılım mimarileri kullanılarak ve işlemleri daha basit bir şekilde yerine getiren algoritmalar kullanılarak bu sorunlar çözülebilir.
YAZILIMI GELİŞTİRİRKEN YAŞANAN ZORLUKLAR Hata Açısından Karmaşıklık: Yazılımın ilk geliştirildiği zamandan günümüze doğru gelindiğinde daha gelişmiş yazılım teknolojileriyle beraber daha ileri seviye yazılımlar geliştirilmektedir. Bu yazılımların seviyesi arttıkça daha farklı ve sofistike hatalar ortaya çıkmaktadır. Bu hataların ne kadar çeşitli bir biçimde ortaya çıktığı da hata açısından karmaşıklığı ifade eder. Yazılımı geliştirirken ve geliştirdikten sonra ne kadar az hata ile karşılaşırsak, hata açısından karmaşıklığımız da o kadar düşük olacaktır.
ÜÇ KATMANLI MİMARİ Üç katmanlı mimari; fonksiyonel işlem mantığı (iş kuralları), kullanıcı arayüzü(sunum), veri saklama ve veri erişiminin bağımsız modüller olarak ve farklı platformlar üzerinde geliştirildiği ve sürdürüldüğü bir istemci-sunucu mimarisidir denebilir. Cambridge, Massachussets te bulunan bir cihaz şirketi olan OEC(Open Environment Corporation) dan John J. Donovan tarafından geliştirilmiştir.
ÜÇ KATMANLI MİMARİNİN KATMANLARI NELERDİR? Üç Katmanlı Mimari nin katmanları ve işlevleri kısaca aşağıdaki gibidir: 1. Veri Katmanı(Data Layer): Veri Katmanı, bir programda verilerin depolandığı ve aynı zamanda komutlardan etkilenen kısmıdır. Veritabanı tabloları, XML dosyaları vs. bu katmana dahildir. 2. Sunum Katmanı(Presentation Layer): Bu katman, programın kullanıcının gördüğü ve işlem yaptığı kısmıdır. Butonlar, metin kutucukları, veri gösteren satırlar, mesaj pencereleri bu katmana dahildir. 3. İş Katmanı(Business Layer): Bu katman ise, kullanıcının yapmak istediği işlemlere göre programın işleyişini sağlar. Veri katmanı üzerinde değişiklik yapan nesneler, kullanıcı arayüzüne veri gönderen ve veri alan kodlar bu katmandadır.
ÜÇ KATMANLI MİMARİNİN KATMANLARI NELERDİR? Resim-1: Üç Katmanlı Mimari nin mantıksal yapısı ve çalışma prensibi
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-2: C#.NET te Üç Katmanlı Mimari nin mantıksal yapısı
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI dbconnection: dbconnection komponenti, genel olarak veritabanı üzerinde Select(veri çekme), Insert(veri ekleme), Update(veri düzenleme) ve Delete(veri silme) işlemlerinin nasıl yapılacağının belirtildiği komponenttir. Veritabanı bağlantısının yapılıp yapılmadığını da kontrol eder. Eğer açık değilse bağlantıyı açar ve veritabanı sorgusunu yerine getirir. Alınan sonuçlar DataTable nesnesine aktarılır.
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-3: dbconnection kod satırı-1
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-4: dbconnection kod satırı-2
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-5: dbconnection kod satırı-3
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-6: dbconnection kod satırı-4
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI DAO(Database Access Object): Bu komponent, Business Logic Layer dan gerekli verileri parametre olarak aldıktan sonra bunları dbconnection komponentine veritabanı üzerinde işlem yapması için gönderir. Burada yer alan kodlar veritabanından verilerin çekilmesi için özel sorguların belirtildiği kodlardır.
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-7: DAO kod satırı-1
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-8: DAO kod satırı-2
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI VO(Value Object): Bu nesne, veritabanı tablolarının iş katmanındaki temsilidir. Veritabanında hangi isimde tablolar ve o tabloların hangi isimde ve veritipinde sütunları varsa burada belirtiriz. Veriyi sunum katmanında kullanacağımızda bu nesneyi göndeririz ve sunum katmanı bu nesneden gerekli verileri ayrıştırarak kullanıcıya sunar.
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-9: VO kod satırı-1
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-10: VO kod satırı-2
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Business Logic Layer: Bu katman Presentation Layer ve DAO arasında bir köprü görevi üstlenir. Kullanıcı veriyi sunum katmanı aracılığıyla bu katmana gönderir. Bu katman da DAO daki veri çekme fonksiyonlarına erişir ve oradan gelen sonuçları toparlayarak yeniden sunum katmanına gönderir.
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-11: Business Logic Layer kod satırı-1
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-12: Business Logic Layer kod satırı-2
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Presentation Layer: Bu katman kullanıcıya verileri onun istediği gibi sunan ve verileri de kullanıcıdan onun istediği şekilde alan katmandır. Bu katman, verileri parametre olarak Business Logic Layer a gönderir ve VO nesnesi şeklinde ondan kendisine sunulan veriyi düzenleyerek kullanıcıya gösterir.
C#.NET TE ÜÇ KATMANLI MİMARİNİN YAZILIMSAL YAPISI Resim-13: Presentation Layer kod satırı
FARKLAR void soru() { OleDbCommand veri_1 = new OleDbCommand("SELECT soru_2 FROM soru_2", conn); OleDbDataReader okut; okut = veri_1.executereader(); while (okut.read()) { label1.text = (okut[0].tostring()); } okut.close(); conn.close(); } Üç Katmanlı Mimari olmadanc# Access SELECT kullanımı
FARKLAR public void view_offers_load(object sender, EventArgs e) { offers.datasource = new teklifdao().selectoffers(id_num, null, 0, true); isimler_gizle = new string[] { "Sahibi", "Tipi", "Markasi", "Modeli", "Fiyati", "Id", "UrunId", "TeklifYapanId", "Durumu", Varlik" }; isimler_goster = new string[] { "TeklifYapan", "TeklifMiktari", TeklifTarihi" }; yeni_isim = new string[,] { { "TeklifYapan", "TEKLİF YAPAN" }, { "TeklifMiktari", "TEKLİF MİKTARI" }, { "TeklifTarihi", "TEKLİF TARİHİ" } }; Edit_Grid(offers, isimler_goster, isimler_gizle, yeni_isim); } Üç Katmanlı Mimari Kullanılarak C# MSSQL Select kullanımı
FARKLAR 3-KTM İle 3-KTM olmadan Performans Karmaşıklığı Çok hızlı Hızlı Alan Karmaşıklığı Daha Az Daha Fazla Hata Karmaşıklığı Daha Az Daha Fazla