Bu yöntemde, iş katmanında bulunan sınıfın örneğini (instance) direkt olarak controller katmanında oluşturuyorsunuz. Yani, controller sınıfı, iş katmanının sınıfını doğrudan çağırarak işlemleri gerçekleştiriyor. Bu yöntem oldukça basittir ve hızlı bir şekilde kullanılabilir. Ancak, dezavantajı, controller ve iş katmanları arasında sıkı bir bağlantı oluşturmasıdır. Bu durum, bağımlılıkların yönetilmesini ve test edilebilirliği zorlaştırabilir.
Ancak bu yöntemin dezavantajı, her zaman aynı arkadaşa gitmek zorunda kalmanızdır. Başka bir arkadaşınızın yardımına ihtiyacınız olduğunda, o arkadaşla doğrudan bağlantınız olmadığı için sorununuzu çözmek zorlaşır. Ayrıca, her zaman aynı arkadaşa bağımlı olmak, işlerin karmaşıklaşması durumunda yönetimi zorlaştırabilir.
// İş katmanında CustomerService sınıfı
namespace BusinessLayer
{
public class CustomerService
{
public void AddCustomer(string name, string email)
{
// Burada müşteri ekleme işlemleri yapılır
}
}
}
// Controller katmanında kullanım
using BusinessLayer; // İş katmanını eklediğiniz isim alanını burada belirtin
public class CustomerController
{
public void CreateCustomer(string name, string email)
{
// İş katmanında bulunan CustomerService sınıfını örnekleyin
var customerService = new CustomerService();
// CustomerService sınıfındaki AddCustomer metodunu çağırın
customerService.AddCustomer(name, email);
// Diğer işlemleri burada devam ettirebilirsiniz
}
}
Bu yöntemde, iş katmanı sınıfını controller katmanına doğrudan bağımlı olmadan, dışarıdan enjekte edersiniz. Yani, iş katmanı sınıfı, controller tarafından alınan bir bağımlılık olarak kullanılır. Bu yöntem, kodun daha esnek ve bakımı kolay hale gelmesini sağlar. Bağımlılık enjeksiyonu, iş katmanının nasıl oluşturulduğunu veya kimin tarafından oluşturulduğunu bilmeden sadece servisi (yani iş katmanını) kullanmanıza olanak tanır.
Dependency injection, arkadaşlarınızın sizi ziyarete gelmesi yerine, sizin ihtiyaç duyduğunuz yardımı almak için bir arkadaşınıza bir mesaj bırakmanıza benzetilebilir. Yani siz, hangi yardıma ihtiyacınız olduğunu belirtirsiniz ve arkadaşınız size yardım eder. Bu şekilde, bağımlı olduğunuz arkadaşınızı doğrudan zorunlu kalmadan değiştirebilir ve başka arkadaşlarınızdan da yardım alabilirsiniz.
namespace BusinessLayer
{
public interface ICustomerService
{
void AddCustomer(string name, string email);
}
public class CustomerService : ICustomerService
{
public void AddCustomer(string name, string email)
{
// Burada müşteri ekleme işlemleri yapılır
}
}
}
using BusinessLayer;
public class CustomerController
{
private readonly ICustomerService _customerService;
// Bağımlılıkları enjekte edin
public CustomerController(ICustomerService customerService)
{
_customerService = customerService;
}
public void CreateCustomer(string name, string email)
{
// ICustomerService üzerinden iş katmanındaki metotları kullanın
_customerService.AddCustomer(name, email);
// Diğer işlemleri burada devam ettirebilirsiniz
}
}
Bu aşamada, bir dependency injection konteyneri kullanarak iş katmanını controller katmanına enjekte etmeniz gerekecektir. Örneğin, .NET Core'da yerleşik olarak gelen IServiceCollection'ı kullanarak bu işlemi gerçekleştirebilirsiniz:
// Startup.cs dosyasında ConfigureServices metodu
using BusinessLayer;
public void ConfigureServices(IServiceCollection services)
{
// ICustomerService için CustomerService sınıfını kaydedin
services.AddScoped();
// Diğer servisleri burada ekleyebilirsiniz
}
Öğrenciye örnek olarak anlatmak gerekirse: Bu yöntem, bir öğretmenin okulda ders verdiği ve herhangi bir öğrenci ders almak istediğinde öğretmenin adını bir kağıda yazıp öğrencilere dağıtması gibidir. Öğrenci, ders almak için öğretmeni çağırabilir ve öğretmenin kim olduğu veya nerede olduğu önemli değildir
Dependency Injection ile çalışmak, genellikle daha iyi bir tercih olabilir. Bu yöntem, kodun daha modüler ve test edilebilir olmasını sağlar. Ayrıca, yazılımınızda değişiklik yapmak istediğinizde, bağımlılık enjeksiyonu sayesinde tek bir yerde (örneğin, Program.cs dosyasında) değişiklik yaparak tüm uygulamaya etki edebilirsiniz.
Yani, bağımlılık enjeksiyonunu kullanmak, kodunuzun daha iyi yönetilmesini ve bakımının daha kolay olmasını sağlar. Bu, büyüyen ve karmaşıklaşan projelerde özellikle önemli bir avantajdır. Ancak, küçük ve basit projelerde, instance alarak iş katmanı kodlarını kullanmak hızlı ve kolay bir çözüm sunabilir.
Sonuç olarak, proje boyutu, karmaşıklığı ve gelecekteki büyüme beklentileri göz önünde bulundurularak Dependency Injection yöntemini tercih etmek genellikle daha iyi bir yaklaşımdır. Bu sayede kodunuz daha düzenli, test edilebilir ve bakımı daha kolay olacaktır.