Yazılım mimarisi gri bir alandır. İleride tekrar dönmek istemeyeceğiniz kararlar almanız gerekir. Frameworkler, programlama dilleri, uygulama sunucuları, veritabanları vb alanlarda karar vermeyi gerektiren şeylerdir. Yazılım mimarisi programcının uygulamayı geliştirdiği ortamda gelişir. Source control, geliştirme araçlrı, IDE, soru cevap siteleri vb. Yazılım uzmanı projede başarılı olmak için doğru mimari kararlar almak zorundadır
Alberto Gutierrez’in My 7 principles to design the architecture for a software project. yazısından türkçeye çevirdiğim yazılım mimarisi tasarımı aşağıdaki konulardan oluşuyor.
- Yazılım mimarisinde kötü kararların sonu fiyaskodur.
- İyi yazılım mimarisi sessizdir.
- Yazılım mimarisine gerekli olan minimum mimari ile başlayın
- Projenizin sınırlarını göz önünde bulundurun.
- İhtiyacınız kadar geliştirin.
- Sürekli olarak sunun.
- Bir müşteriniz olsun.
- İsrafı önleyin
- Geridönüşümü ve saydamlığı maksimize edin.
Yazılım mimarisinde kötü kararların sonu fiyaskodur
Yazılım mimarisinde kötü mimari kararlar geliştirdiğiniz projenizin tamamen fiyasko ile sonuçlanmasına neden olur. Pek çok zor kararlar da geriş dönüşü gerektirir.
İyi yazılım mimarisi sessizdir
İyi yazılım mimarisi normal şartlarda aynen gizli kalır. Iyi mimariler, diğer yandan pek çok proje için, gerçekten avantaj kazandırmaz, sadece normal gelişime imkan verir. Aşağıdaki prensip listesini takip ettiğinizde size güvenli ve ölçeklenebilir yazılım mimarileri geliştirmeye yardım eder.
Yazılım mimarisine gerekli olan minimum mimari ile başlayın
Gereksiz yeni teknoloji ya da frameworkler gibi gereksiz karmaşıklıklardan sakının.
Projede kullanılacak herhangi bir mimari elementin iyi bir kullanım nedeni olmalıdır. Eğer mimari elementin faydaları veya gerekliliği kanıtlanmamışsa, bu mimari element kaldırılmalıdır.
Projenizin sınırlarını göz önünde bulundurun
Yazılım mimarisini tanımlamak, birşeyleri projenizin kısıtlamlarına ve risklerine adapte etmektir.
Başlangıç projesi veya çok uluslu bir şirket projesi için aynı yazılım mimarisini kullanmamalısınız. Ayrıca ekibinizin uzmanlığını da gözönünde bulundurmalısınız, eğer belirli bir programlama dili veya framework’de çok deneyimlilerse ve tercih ettiğiniz başka bir tanesi yoksa muhtemelen onu kullanmalısınız.
Risk alanları, çok geçerli bazı hizmetler gibi ihtiyaçlar, yazılım mimarisi açısından aklınızın bir köşesinde olması gereken ilave kararlar olacaktır.
Kısıtlamalar ve riskler sizi rahat koltuğunuzdan öteye götürür. Ancak yazılım mimarisinin gerçekten ihtiyaç gösterdiğinden de emin olunmalıdır.
İhtiyacınız kadar geliştirin
Mimari elementi mümkün olduğunca geciktirin, özellikle karmaşıksa.
Bazen ihtiyaçlar, karmaşık entegrasyonlar/frameworkler aramak gerekiyormuş gibi görünür. Bu tür durumlar için başlangıçta göz ardı etmeyi ve öncelikle mümkün olduğunca uçtan uca senaryoyu tamamlamak daha uygundur. İlk senaryo tamamlandığında, o noktadan geliştirmeye, her seferinde bir adımla, kullanıcı tarafından istenen yeni fonksiyonellikleri ekleyin. Bu yol mimari elementin gerçekten gerekliliğine açıklık getirecek, eğer öyleyse, projenizdeki diğer elementlerle nasıl entegre edeceğinizi de açıklık getirmiş olacaktır.
Sürekli olarak sunun
Sürekli sunmak (Deliver continously), yazılım mimarinizi rafine etmenizi sağlayan bir araçtır.
Sürekli sunumun 4 prensibi vardır:
Deliver soon – yakında sunmak: kısa sürede sunmanın amacı, müşterinizden geri dönüşüm devrini kısaltarak, ihtiyaçlarda gerekli değişiklikleri yapmanıza izin vermektir.
Deliver many times – pek çok defa sunmak : pek çok defa sunmak geri dönüşümün pürüzsüz olmasını sağlar.
Bug free – hatasız : kod kritik hatalardan temizlenmelidir
production ready – kullanıma hazır : herhangi bir anda dağıtılabilir olmalıdır.
Bir müşteriniz olsun
Bir müşteri gibi davranacak birine sahip olmak, yazılım mimarisinde öncelikler ve dağıtımlar konusunda karar vermek için faydalıdır.
Doğru biçimde müşteri rolünde olan bir kişiye karşı başaramamanın nedenleri, geliştirme sırasında yanlış yönlendirme ve bu nedenle geliştirilen final ürün beklentiyle uyuşmayacaktır.
İsrafı önleyin
Bazen yazılım mimarisi aşırıya kaçmasınıza öncülük edebilir. Acemi yazılım mimarisi, uygulamanın mevcut mimarisinin kağıt üzerindeki ile aynı olduğuna ve size geleceği görüyormuş gibi yapar.
Bu özellikle waterfall benzeri işlemleri takip eden şirketlerde olur, bazen kaçınılmaz olarak, döküman/diagram vb üretmeye zorlar.
Aşırıya kaçılmış yazılım mimarisi/uygulama tasarımı sadece kötü değil savurganlıktır da. Temel risk, geliştirme ekibinin temel tanımlardan uzaklaşıldığına inanılmasına neden olur. Gelecek değişikliklerin adapte edilmesini çok güçleştirir.
Geridönüşümü ve saydamlığı maksimize edin
Geridönüşüm ve saydamlık müşteri için kötü süprizlerin olmamasını garantiler. Güvenilir ve verimli bir ilişkinin oluşturulmasına yardım eder.
Hernhangi bir proje için geridönüşümü ve saydamlığı maksimize etmek yazılım geliştirme işlemlerinin benzersiz hedeflerinden biridir. Her ne yanlış giderse veya müşteri tanımlamarda değişikliğe giderse gitsin, değişim gerektiğinde erken ve hazırlı tepkiye imkan verir.
Yazılım mimarisini tasarlamak projenin başında iyi düşünülmesi gereken bir çalışmadır. İhtiyaçların analizinde başlayan yanlışlar genelde pek çok projenin kötü sona dönüşmesine neden olmuştur. Kodlama çalışmalarında iyi bir programcı, zamanını kodlamadan daha çok düşünmeye ayırmalıdır.