Dependency Injection Nedir ? Nasıl Uygulanır ? (Kod Örneğiyle)

Dependency Injection: Yazılım bağımlılığı sevmez.

Dependency Injection uygulamanın avantajları nelerdir ?

  • Bağımlılık oluşturacak nesneleri direkt olarak kullanmak yerine, bu nesneleri dışardan verilmesiyle sistem içerisindeki bağımlılığı minimize etmek amaçlanır. Böylece bağımlılık bulunan sınıf üzerindeki değişikliklerden korunmuş oluruz.
  • Unit testlerin yazımını kolaylaştırırken doğruluğunu da artırır. Yazılım geliştirmedeki en önemli konulardan biri de yazılım içerisinde bulunan componentlerin “loosely coupled” (gevşek bağlı) olmasıdır. Dependency Injection’da bunu sağlayabilen önemli tekniklerden birisidir. Böylece bağımsızlığı sağlanan sınıflar tek başına test edilebilir.

Dependency Injection Nasıl Uygulanır ? (Kod Örneğiyle)

Bağımlı bir kod örneği
  • Kod esnek değildir. Bakımı ve genişletilebilirliği zordur. DieselEngine sınıfında yapılacak herhangi bir değişiklik Car üzerinde de değişikliğe neden olacaktır.
  • Bağımlılıklar Unit testi zorlaştırır. Yalnızca bir sınıfın işlevlerini test etmek istendiğinde, diğer bağlı sınıfları da test etmeniz gerekir.
  • Sınıflar arası bağımlılık fazla olduğu için bir işlevi başka bir sınıfın yeniden kullanması oldukça zorlaşır. Çünkü bağımlılık demek çoğu zaman, sınıfların birbirleri için geliştirilmiş olması anlamına gelir.
public interface Car {
void drive();
}

public interface Engine {
String start();
}
public class DieselEngine implements Engine {

@Override
public String start() {
return "Diesel Engine started.";
}
}
public class ElectricEngine implements Engine {

@Override
public String start() {
return "Electric Engine started.";
}
}
public class GasolineEngine implements Engine {

@Override
public String start() {
return "Gasoline Engine started.";
}
}
public class AutoCar implements Car {

Engine engine;

public AutoCar(Engine engine) {
this.engine = engine;
}

@Override
public void drive() {

String engineStart = engine.start();

}
}
Engine engine = new ElectricEngine();Car car = new AutoCar(engine);car.drive();
public void setEngine(Engine engine) {       this.engine = engine;}
((AutoCar) car).setEngine(new DieselEngine());car.drive();

--

--

--

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Gökhan Ayrancıoğlu

Gökhan Ayrancıoğlu

Software Engineer @Yemeksepeti • #Java • #Spring Boot • #Kotlin • #Spark • #Microservices • https://gokhana.dev

More from Medium

A Fun Approach to Strategy Pattern

Chain of Responsibility Pattern(Behavioral Design Pattern)

Understanding Microservices as a Software Architecture

Matrix URIs, their semantics and usage in Java RESTful Services