Dependency Injection, Dependency Inversion ve Inversion of Control Kavramları

Özellikle büyük projelerde yazılım tasarımı çok önemlidir. İyi tasarlanmış bir yazılımda geliştirme daha rahat yapılabilmektedir. Bu noktada en önemli kavramlardan biri de Dependency Injection’dır.

Dependency Injection nedir?

public class Employee{

private DBHelper helper;
public Employee(){
helper = new DBHelper();
} .... ...}

Yukarıdaki klasik yöntemle yazılmış class’ın constructor’ında DBHelper türünden helper nesnesi oluşturuluyor. Bu durumda Employee class’ı DBHelper class’ına bağımlı hale gelmiş oluyor(tightly coupled). Eğer DBHelper yerine başka bir helper class’ı kullanmak isterseniz Employee class’ını güncellemeniz gerekecek. Bu durumdan kaçınmak için Dependency Inversion Principle(DIP) kullanılır. Dependency Inversion prensibine göre yüksek seviye modüller, düşük seviye modüllere bağlı olmamalı. Her ikisi de soyut (abstract) kavramlara bağlı olmalıdır. Yani DBHelper class’ına bağımlı olmamak için interface veya abstract class kullanmalıyız.

public class Employee{

private IDBHelper helper;
public Employee(){
helper = new DBHelper();
} ... ...}

Yukarıdaki kodumuz her ne kadar ilk yazılan koddan iyi olsa da hala bir problem var. helper nesnesi hala Employee class’ı içerisinde oluşturuluyor. Bu noktada karşımıza Inversion of Control(IoC) prensibi çıkıyor. Bu prensibe göre bağımlılıkları oluşturmanın kontrölü dışarıdan olmalıdır. Bu örneğimiz üzerinden açıklamak istersek Employee class’ı helper nesnesini oluşturmamalı, bu nesneyi dışarıdan almalı. Dependency Injection, IoC prensibini implement eden bir design patern’dır. Bağımlılıklar class’a dışarıdan “enjekte” edilir.

public class Employee{

private IDBHelper helper;
public Employee(IDBHelper helper){
this.helper = helper;
}... ...}

helper nesnesini parametre ile dışarıdan alarak dependency injection yapmış oluyoruz. IDBHelper interface’ini implement eden her class’ın nesnesi Employee class’ı içerisinde kullanilebilir duruma gelmiş oldu. Böylelikle bağımlılığı minimuma indirmiş olduk(loosely coupled).

 

Dependency Injection avantajları nelerdir?

  • Yazılımı oluşturan yapıların birbirleri ile olan bağımlılıkları azalır,
  • Kod tekrarını azaltır,
  • Yazılımın geliştirilmesini kolaylaştırır,
  • Test edilebilmeyi kolaylaştırır.

MVVM nedir?

Merhabalar, bu yazımda MVVM design pattern’i açık bir şekilde anlatmaya çalışacağım. Genelde bir uygulamayı yazarken geleceğini düşünmeden yazarız, buna bir çeşit alışkanlık diyebiliriz. Eğer ilk kez bir design pattern ile uğraşacaksanız ilk tepkiniz: “ne gerek var buna ya ben zaten aynısını daha kısa sürede bildiğim yöntemle yapıyorum” olacak, benim de olmuştu 🙂 Ama yazacağınız uygulama büyük ve geliştirilebilir bir uygulama olacaksa bu klasik yöntemden vazgeçmeniz gerekecek. Neden mi?

Çünkü;

  • Tüm uygulama mantıklarını sayfanın .cs uzantılı dosyasına yazacağınız için ileride geliştirme aşamasında kodlar içinde kaybolacaksınız.
  • XAML’i modifiye etmek veya değiştirmek için ekstra çaba sarfedeceksiniz.
  • Arkada çok fazla kod olacağı için , en ufak bir arayüz değişikliğinde gereksiz zaman kaybeceksiniz.
  • Sayfada gösterilecek bilgiler bir data servisten geliyorsa, bunun tasarım sırasında görünümünü göremeyeceksiniz, doğal olarak tasarımınızı çok fazla geliştiremeyeceksiniz.

 Peki nedir bu MVVM?

MVVM,  MVC’nin bir çeşit XAML’a uyarlanmış hali diyebiliriz. Bu yüzden MVC ile benzer yanları çoktur, eğer MVC ile uğraşanlarınız varsa MVVM’e adapte olmak o kadar da zor olmayacak. MVVM ‘i farklı kılan nokta ise, data binding, ViewModel ve View ile arasında olan çift taraflı iletişim. MVVM’i XAML ve .NET kullanılan her uygulamada kullanmak mümkün.( Windows Phone, Windows Store)

MVVM 3 yapıdan oluşmakta;

Model, business logic dediğimiz uygulamanın mantığını ve gerekli tüm servisleri kapsar.

View, arayüzdür, yani son kullanıcının gördüğü kısımdır.

ViewModel, bu iki yapı arasındaki iletişimi sağlar, ViewModel için en güzel yakıştırma orkestra şefi olabilir, uygulamayı koordine eden en önemli yapı dersek yanlış olmaz sanırım.

viewmodel

Genelde her bir View, bir ViewModel’a sahiptir. Böylece bağımlılık minimuma yaklaşmış olur. View-ViewModel arasında çift yönlü iletişim: Data Binding vardır, ViewModel-Model arasında ise klasik metot çağırmalar mevcuttur.

Bu 3 yapı sayesinde MVVM, business logic ile arayüzü birbirinden ayırır, bu sayede tasarımcı bir yandan tasarımını yaparken, developerda arkadaki işlemleri yapar. Bu aynı zamanda MVVM’in kullanım amacıdır. Böylece uygulamanın geliştirilmesi ve  test edilmesi kolaylaşır.

Bir sonraki yazımda, Windows Phone 8’de MVVM design pattern’in kullanılırlığını gösteren örnek bir uygulama üzerinden anlatıma devam edeceğim.

 

Windows 8 ve Windows Phone ‘a Uygulama Geliştirmenin Kolaylığı

Microsoft’un en çok beğendiğim tarafı uygulama geliştirmek isteyenlere ve öğrencilere verdiği inanılmaz derecede yararlı kaynaklar. Üniversitelerde, çoğu üniversite C# dersi vermiyor, bu yüzden windowsa uygulama geliştirmek isteyenler öncelikle bu dili bir şekilde öğrenmesi gerekiyor. Ben de windowsa uygulama geliştirmek için okuldan bağımsız C# öğrenenlerden birisiyim. Peki nasıl öğrendim kaynakları nereden buldum? Hepsinin cevabını yazının sonunda öğrenmiş olacaksınız.

Dreamspark;

Microsoft’un öğrencilerin yazılım geliştirme süreçlerinde ihtiyaç duyduğu Microsoft yazılımlarını ücretsiz edinebildikleri bir platform. Buradan birçok Microsoft yazılımını indirip ücretsiz kullanabilirsiniz. Biz yazılımcılar için özellikle Visual Studio 2013 benim Dreamspark’ta ki favorim 🙂

Windowsa uygulama geliştirmek için olmazsa olmazımız başımızın tacı, Visual Studio’muzu buradan indirebilirsiniz.

dreamspark

Açık Akademi

Microsoft Türkiye’nin son dönemlerde en çok önem verdiği bir platform olan Açık Akademi’de sıfırdan başlayıp ileri dereceye kadar Microsoft ürünlerini öğrenmek isteyenler kolay bir şekilde temeli alıp ilerleyebiliyor. Ayrıca sanalsınıflarda da mvp’lerden ders alabiliyorsunuz, gayet eğlenceli geçiyor 🙂 Açık Akademi’nin sevdiğim özelliklerinden biri de arayüzünün çok kullanışlı olması. Yani siteye girdiğiniz zaman ne yapmanız gerektiğini hemen anlayabiliyorsunuz. Yapılan yarışmalarda da hediyeler kazanabilirsiniz.

http://www.acikakademi.com/

Buradan hangi alana yönelmek istiyorsanız o alanın içeriğini öğrenip uygulamanızı yazmaya başlayabilirsiniz. 🙂

acikakademi

Microsoft Virtual Academy

Microsoft Virtual Academy ingilizcesi olanlar için harika bir kaynak. Aslında Açık Akademinin global şekli de diyebiliriz. Fakat Virtual Academy ‘de (bana göre) anlatım çok daha açık ve ilerlemek daha kolay, çünkü herşey kodlar üzerinden anlatılıyor. İçerik olarak C#’tan HTML5’e Virtualization’dan Server Infrastructure’a kadar birçok konuda anlatım mevcut. Kurslar bölümünden istediğiniz kursun derslerini almaya başlayabilirsiniz, hem de ücretsiz. Virtual Academy’ de favorim C# kurslarını anlatan Bob Tabor, kendisi C# mvp si ve kendisine has güzel bir anlatım şekli var. Bakmanızı tavsiye ederim.

http://www.microsoftvirtualacademy.com

virtualacademy1

virtualacademy2

+13 KURS DAHA GÖRÜNTÜLE’ ye tıkladığınızda ileri düzey Windows 8 ve Windows Phone 8 kurslarını ve diğer kursları da göreceksiniz.

Windows 8 ve Windows Phone’a uygulama geliştirirken size SDK ‘lar lazım olacak.

Windows 8 SDK: http://msdn.microsoft.com/tr-tr/windows/desktop/hh852363.aspx

Windows Phone SDK: http://developer.windowsphone.com/en-us/downloadsdk

Son olarak faydalı bulduğum, Mertkan Elpeze’nin yazdığı bir yazıyı paylaşmak istiyorum. Uygulamanızı yazdıktan sonra markete yüklerken fail yememesi için okumanızda fayda var. : ( Uygulamayi Markete Göndermek – Yayınlamak )

Not Defteri ile Program Yazma

.NET Framework içinde bulunan csc.exe ( C-Sharp Compiler) ile komut satırında, not defteri ile yazdığımız C# kodlarını, Visual Studio gibi derleyiciler olmadan da derleyebiliriz. csc.exe .NET Framework 4.0 içinde bulunmaktadır.

Komut satırında çalışacağımız için işi daha da zorlaştırmamak için C’de OrnekProgramlar diye bir klasör oluşturabiliriz.

1

Daha sonra not defteri açıp C# kodlarımızı yazmaya başlayabiliriz. Yazdıktan sonra kaydederken dikkat etmemiz gereken, Text Documents(*.txt) yi değil All Files(*.*) seçip .cs olarak kaydetmek.

2

 

Okumaya devam et

Gano Hesaplama Programı

Görsel

C ile gano hesaplama başlıklı yazımı birçok kişi ziyaret etti. Gelenlerin arasında programı kullanmak isteyenlerin olacağını da düşündüğüm için C# ile bu küçük programı yazdım. 8 derse kadar GANO hesabı yapabilirsiniz. Gayet kullanışlı, işinize yarayacaktır. Hatalar olabilir, geliştirilmesini istediğiniz bir bölüm olursa buradan yorum yazarak bana iletebilirsiniz.

Bu linke tıklayarak Gano Hesaplama programını indirebilirsiniz.

Windows Phone işletim sistemli bir telefon kullanıyorsanız Gano Hesaplama uygulamasını telefonunuza yükleyip telefonunuzdan ganonuzu hesaplayabilirsiniz.

258x67_WPS_Download_cyan