YAZILIM MİMARİSİ ve TASARIM DESENLERİ (Software Architecture and Design Patterns)
YAZILIM MİMARİSİ NEDİR?
Günlük hayatta kullandığımız mimari deyimi üzerinden düşünürsek bir yapının tasarımına ait çok detaylı bir plan şeklinde olduğunu söyleyebiliriz.Aynı durum bir yazılım için de geçerlidir.Kurumsal veya kişisel yazılım projelerimizin bir çok bileşenden oluştuğunu söylemek mümkündür; teknik ihtiyaçlar, performans, tasarım ve güvenlik gibi unsurlar yazılım geliştirme sürecinin daha ilk aşamasında kesinleştirilerek sonraki adımların bu plana göre işlemesi gereklidir.Şöyle bir tanım yapabiliriz:
"Yazılımın kalite özelliklerini karşılayacak şekilde yapısal bir çözüm tasarlamaktır."
En çok karıştırılan kavramlardan biri de bir yazılım projesinde mimarinin belirlenmesi tasarımdan önce gelir.Yazılımda birden çok design pattern kullanabiliriz fakat mimari tekdir.Özellikle büyük projelerde zaten ihtiyaçları karşılamak için birden fazla tasarım kullanılabilir.
Sık kullanılan yazılım mimarilerine bakalım.
- Layered (n-tier):Örnek olarak MVC'yi düşünebiliriz.
- Event Driven:Android mimarisi ve notification services örnek olarak düşünülebilir
- Microkernel:Çekirdeğe ek özellikler eklenerek gelişir.
- Microservices:Birbirinden ayrıştırılmış servisler ile platform, dil, sistem veya framework bağımlılığından kurtarır.
- Space-based:
Daha detaylı bilgiyi buradaki yazıdan edinebilirsiniz.
DESIGN PATTERN NEDİR?
Yazılım projelerinde sıklıkla sorunlar ile karşılaşırız.Bu sorunları en optimize şekilde çözmek için üretilmiş tasarımlara design pattern diyebiliriz.Yazılımın daha iyi anlaşılabilmesi için bunları bilmek ve kodumuzu bu tasarımlara göre yazmak işimizi kolaylaştıracaktır.Özellikle nesne yönelimli programlama dilleri ile yazılım geliştiriyorsanız tasarım desenlerini iyice anlayarak en uygun olanı kullanmak yazılım kalitesini büyük oranda artıracaktır.Bu konu ile yakından ilişkili bir prensip olan SOLID prensiplerine bakalım biraz da.Robert Martin tarafından geliştirilen bu prensipler ile kod karmaşıklığının azaltılarak, okunurluğun artırılması, minimum zaman kaybı ile kodda istenilen değişiklikleri yapabilmek hedeflenmiş.Bu 5 prensibin ilk harflerinden oluşan SOLID'in ne olduğunu inceleyelim:
Belirli bir kod parçası sadece bir işten sorumlu olmalı.Bu kod parçası bir class, bir interface ya da bir metod olabilir.
2-Open-Closed Principle(Açık Kapalı Prensibi):
Burada kod davranışı geliştirmeye açık fakat değişime kapalıdır.Örneğin kodun interface ya da soyut(abstract) olarak geliştirilmesi gibi.
3-Liskov Substitution Principle ( Liskov’un Yerine geçme Prensibi):
Bu prensip ile öğütlenen bir sınıftan türetilen alt sınıflarda üst sınıfın tüm özellikleri taşınmalıdır.Bu sayede nesneler yer değiştirdiğinde bile hata alınmasının önüne geçilebilir.
4-Interface Segregation Principle ( Arayüz Ayrımı Prensibi):
Bu prensipte interface'lerin gereğinden fazla metod tutmaması istenmektedir.Class'lar kullanmayacakları metodları implement etmeye zorlanmamalıdır.Interface'leri kategorize ederek gereksiz override'ın önüne geçilebilir.
5-Dependency Inversion Principle ( Bağımlılıkların Terslenmesi Prensibi):
Bir sınıf diğer bir sınıfa doğrudan bağımlı olmamalı.Aradaki bağ soyut bir kavram üzerinden gerçekleşmeli.Bu bağ bir interface olabileceği gibi bir abstract class da olabilir.
Design Pattern'lar 3 temel yaklaşım altında gruplanabilir, detaylara buradan ulaşabilirsiniz.
1.Creational Design Patterns:
2.Structural Design Patterns:
3.Behavioaral Design Patterns:
Bir sonraki yazımda design pattern'ları C# ile örnek kodlar üzerinden detaylıca açıklamaya çalışacağım.
iyi çalışmalar :)