Soru Ruby bağımlılık enjeksiyon kitaplıkları


Bazı Ruby bağımlılığı enjeksiyon kitaplıklarına bakıyorum. Özellikle, ben kontrol ettim İğne ve Polis arazisi. Oldukça uzun zamandır etrafta dolaşıyorlar, ama çok fazla kullanım alanı yok.

Bu iki kütüphaneyi kullanmanın artıları ve eksileri nelerdir? Elbette, bu iki kütüphanenin iyi bir şekilde faydalanabileceği birçok kütüphane / çerçeve gibi görünüyor. Merb / Datamapper'ın Kancası.


25
2017-11-12 09:58


Menşei




Cevaplar:


Copland ve Needle'ı yazan Jamis Buck, buraya gönderildi Ruby dünyasında İğne, bağımlılık enjeksiyonu ve kullanışlılığı hakkında.

Uzun ama okumaya değer, ama sorunuza en uygun tek paragrafı istediğinizde, bunu en baştan hemen önce öneririm:

DI çerçeveleri gereksizdir. Daha fazlası   sert ortamlar, değeri var.   Ruby gibi çevik ortamlarda değil   çok fazla. Desenler kendileri   hala uygulanabilir, ama dikkat et   seni düşünmenin tuzağına düşmek   her şey için özel bir araca ihtiyacım var.   Ruby Play-Doh, hatırla! En kalsın   bu tarafta.

HTH


46
2017-11-12 10:56



Bu konuşmayı geçen hafta sonu RubyConf'da şahsen görmek zorundaydım, o harika bir iş çıkardı. Alt satır - Ruby'de bağımlılık enjeksiyonuna ihtiyacınız yoktur. - mwilliams
Makale bağımlılık enjeksiyonunu kullanmaman gerektiğini söylemiyor, DI çerçevesine ihtiyacınız olmadığını söylüyor. Makaleden bir alıntı daha var, "Yani, Ruby'de DI için yer yok mu? Kesinlikle var. Ben neredeyse her gün Ruby'de kullanıyorum, ama DI çerçevesini kullanmıyorum. Yakut'un herhangi bir günü temsil etmek için yeterli gücü var. -Doğa ihtiyacınız olan DI deyimleri. " - Chris Kentfield
Sadece işaret etmek istiyorum DI Çerçeveleri Ruby'de gereksizdir, ancak DI paradigma göz ardı edilmemelidir. - Aaron Qian


http://fabiokung.com/2010/05/06/ruby-and-dependency-injection-in-a-dynamic-world/: Bu, James Buck makalesinden başka, çok daha az düşünülmüş bir makaledir. Alt satır bağımlılık enjeksiyonuna ihtiyacınız yok, çünkü ruby ​​aynı zamanda iyi çalışan ve Java dünyasında gerçekten bulunmayan pek çok iyi alternatif sunuyor.

Bu alternatiflerden biri, Java'nın sahip olmadığı ve diğeri dilin hemen hemen her şeyi geçersiz kılma / yeniden tanımlama yeteneğidir. Diğer özellikler, temel olarak herhangi bir nesneye herhangi bir mesaj gönderebildiğiniz ve bu mesaj için bir uygulama sağlandığında dinamik şeyler yazmayı içerir. Bütün bunlar bir DI çerçevesine olan ihtiyacın çoğunu ortadan kaldırmak için birlikte çalışır. Bu şekilde tasarım deseni hala Ruby'de de geçerlidir ve bazen bunu kullanmak mantıklıdır.

Yukarıdaki üst düzeydeki Alexey Petrushin'in yaptığı bir diğer nokta da bağımlılık enjeksiyonunun öncelikle bir tasarım deseni olması ve takımın ikincil olması ve çoğunlukla Java'daki bazı şeylerin sıkıcılığından kurtulmak olduğudur. Ruby'de, Java'da hangi baharın ya da guildin sizin için yaptıklarının çoğuna benzetebilirsiniz. Bu nedenle, tam bir bağımlı bağımlılık enjeksiyon çerçevesi Ruby'de esas olarak gereksizdir.

Bazen bir DI çerçevesine sahip olmak söyleniyor ki, nihayetinde bir şeylerin kablolanmasının sıkıcılığını ortadan kaldırabileceğinden çok güzel. Herhangi bir Ruby'ye özgü DI çerçevesini kefil edemem ama bir çok Ruby projesini biliyorum, çünkü nihayetinde başka bir dilde (Java bile) yeniden yazıldım çünkü oyunların doğası, şeylerin sürdürülmesini / uzatılmasını zorlaştırıyor. Bunun çeşitli güçlü dil özellikleriyle kendilerini geliştiren geliştiricilerle yapacakları çok şey olduğundan şüpheleniyorum. DI çerçevesine sahip olmak, bunu engellemeye yardımcı olabilecek bir yapı ve deyimler verir.


7
2017-10-31 12:04



Özellikle son paragrafla anlaştık! - Zeke Fast


İşte bir tane daha IoC http://alexeypetrushin.github.com/micon

Web çerçevemin (Rails değil) bir çekirdek bileşeni olarak kullandım, onu burada çalışırken görebilirsiniz - http://ruby-lang.info (Bu site onunla çalışır). Ve bana çok zaman ve kod kurtardı, bu yüzden kişisel olarak IoC'yi çok faydalı buldum (bazı durumlarda).

DI çerçeveleri gereksizdir. Daha rijit ortamlarda, değeri vardır. Ruby gibi çevik ortamlarda, o kadar değil. Desenlerin kendisi hala uygulanabilir, ancak her şey için özel bir araca ihtiyacınız olduğunu düşünmenin tuzağına düşmekten sakının. Ruby Play-Doh, hatırla! Hadi böyle devam edelim.

Jamis Buck'la ilgili konuşmayı izledim ve ona inanıyorum ve katılmıyorum http://ruby-lang.info/blog/you-underestimate-the-power-of-ioc-3fh


1
2018-06-17 18:38