Merhaba,
Sonda çıkaracağım sonucu/soruyu başta soruyorum: Override imkanı varken interface türünde abstract benzeri sınıf görünümlü şeyler ne işe yarar, DI için mi?
Konuyu ilk olarak geçen ay dile getirmiş ve şuraya kısa bir inceleme olarak bildirmiştim:
https://forum.dlang.org/post/trfaapnxvlozbxeceuog@forum.dlang.org
Diğer başlıkta tipik bir DI örneği mevcut. Ama bugün bir şey keşfettim; sanki interface boşa zaman kaybı ve kafa karıştırıcı. Aynı kodu gereksiz kısımlarını gizleyerek naklediyorum:
class/*
interface //*/
IConnection {
string SendMsg() { return ">IConnection"; }
}
class SMSConnection : IConnection {
override string SendMsg() {
return "Sending a SMS...";
}
}
class EMAILConnection : IConnection {
override string SendMsg() {
return "Sending an e-Mail...";
}
}
/*
class ConnectionSetup {
private IConnection connection;
this(IConnection connection) {
this.connection = connection;
}
string Service() {
return connection.SendMsg();
}
}
*/
import std.stdio;
void main() {
auto SMS = new SMSConnection();
auto EMAIL = new EMAILConnection();
auto services = [ SMS, EMAIL ]; /*
auto services = [
new ConnectionSetup(SMS),
new ConnectionSetup(EMAIL)
];//*/
foreach(connect; services) {
//connect.Service.writeln();/*
connect.SendMsg.writeln();//*/
}
typeof(services).stringof.writeln;
}
Özetle aynı sonucu elde ediyorsak neden sağ elimizi boynumuz çevresinden çevirip sol kulağımızı tutmaya çalışıyoruz ki!
Neredeyse 50 satırlık bir kodu yarı yarıya indirmek ve gereksiz bir helper (ConnectionSetup)'dan kurtulmak mümkünken, override olanağına teşekkür etmek geçiyor içimden 😀
Sevgiler, saygılar...