Kontrol Tersi nedir?

oy
1k

İlk karşılaşıldığında Kontrolü (veya IOC) inversiyon oldukça kafa karıştırıcı olabilir.

  1. Bu ne?
  2. Hangi sorunları çözer?
  3. değilken Ne zaman mülk ve?
Oluştur 06/08/2008 saat 04:35
kaynak kullanıcı
Diğer dillerde...                            


32 cevaplar

oy
1k

Kontrol Inversion (IOC) ve Bağımlılık Enjeksiyon (DI) kalıpları kodundan bağımlılıkları kaldırma ilgili.

Örneğin, uygulama bir metin editörü bileşeni olduğu görüşünde ve yazım denetimi sağlamak istiyoruz. Sizin standart kod aşağıdaki gibi görünecektir:

public class TextEditor {

    private SpellChecker checker;

    public TextEditor() {
        this.checker = new SpellChecker();
    }
}

Bizim burada yaptığımız arasında bir bağımlılık oluşturur TextEditorve SpellChecker. IoC senaryosunda yerine böyle bir şey yapacağını:

public class TextEditor {

    private IocSpellChecker checker;

    public TextEditor(IocSpellChecker checker) {
        this.checker = checker;
    }
}

Ilk kod örnekte başlatmasını edilir SpellChecker( this.checker = new SpellChecker();yani,) TextEditorsınıf doğrudan bağlıdır SpellCheckersınıfı.

Ikinci şifre örnekte sahip olarak soyutlama oluştururken SpellCheckerbağımlılık sınıfı TextEditoryapıcı imza (sınıfta bağımlılık başlatılıyor). Bu bize daha sonra bağımlılık çağrı şöyle TextEditor sınıfa geçmesine izin verir:

SpellChecker sc = new SpellChecker; // dependency
TextEditor textEditor = new TextEditor(sc);

Şimdi yaratarak müşteri TextEditorsınıfını hangi üzerinde kontrolü vardır SpellCheckerbiz bağımlılığı enjekte ediyorlar çünkü uygulama kullanmak TextEditorimza.

Bu, orada sadece basit bir örnektir makalelerin iyi dizi daha ayrıntılı olarak bunu açıklar Simone Busoli tarafından.

Cevap 06/08/2008 saat 08:22
kaynak kullanıcı

oy
485

Kontrol inversiyon bir gui programı gibi zaman programı geri aramalar, örneğin elde ediyoruz.

Örneğin, eski bir okul menüsünde, aşağıdakiler bulunabilir:

print "enter your name"
read name
print "enter your address"
read address
etc...
store in database

böylece kullanıcı etkileşiminin akışını kontrol eder.

bir GUI programı veya bloklarýnýn olarak, bunun yerine söylemek

when the user types in field a, store it in NAME
when the user types in field b, store it in ADDRESS
when the user clicks the save button, call StoreInDatabase

Bu yüzden şimdi yerine sabit bir sırayla bilgisayar kabul kullanıcı girişi ... ters kontrolün, kullanıcı verileri girilir sırasını kontrol eder ve veri veritabanında kaydedildiğinde.

Temel olarak, bir olay döngü ile bir şey geri aramalar veya yürütmek tetikleyiciler bu kategoriye girmektedir.

Cevap 06/08/2008 saat 06:42
kaynak kullanıcı

oy
356

Kontrol Tersi nedir?

Eğer bu basit iki adımı uygularsanız, kontrolün inversiyon yapmış:

  1. Ayrı Ne gelen kısmını to-do zaman parçasını to-do.
  2. Emin olun zaman parçası olarak bildiği küçük hakkında mümkün olduğunca neyi parçası; ve tersi de doğrudur.

Eğer uygulanması için kullandığınız teknoloji / dile dayalı bu adımların her biri için olası birçok teknik vardır.

-

Inversiyon Kontrol Inversion (IOC) bir parçası kafa karıştırıcı bir şeydir; Çünkü inversiyon göreceli bir terimdir. IoC anlamak için en iyi yolu o kelime hakkında unutmak!

-

Örnekler

  • Olay işleme. Olay işleyicileri (bölümünü what-to-do) - (-to-do parçası) Raising Olaylar
  • Arabirimler. Bileşen istemcisi (zaman-to-do kısmı) - Bileşen Arayüz uygulanması (what-to-do parçası)
  • xUnit fixure. (What-to-do parçası) kurulum ve ayırma - xUnit çerçeveler sonunda başında ve söküm de Setup çağrıları (zaman-to-do parçası)
  • Şablon yöntemi tasarım modeli. Şablon yöntemi zaman-to-do parçasını - ilkel alt sınıf uygulaması bölümünü what-to-do
  • COM DLL konteyner yöntemleri. DllMain'de, DllCanUnload vb (what-to-do parçası) - COM / OS (zaman-to-do parçası)
Cevap 22/07/2010 saat 18:34
kaynak kullanıcı

oy
81

Kontroller ters çözüm endişeleri ayıran hakkındadır.

IoC olmadan : Bir var dizüstü bilgisayar ve yanlışlıkla ekrana bölünürler. Ve lanetlemek, aynı model dizüstü ekran pazarında hiçbir yerde bulabilirsiniz. Yani sıkışmış konum.

IOC ile : Bir var masaüstü bilgisayar ve yanlışlıkla ekrana bölünürler. Sen sadece piyasadan neredeyse herhangi bir masaüstü monitörü yakala bulmak ve bu senin masaüstü ile iyi çalışır.

Masaüstü başarıyla bu durumda IoC uygular. Bu dizüstü değil iken, onu tamir için belirli bir ekran ihtiyacı monitörler çeşitli türünü kabul eder.

Cevap 25/09/2013 saat 15:24
kaynak kullanıcı

oy
77

Kontrol, (ya da IOC) Inversiyon, hakkındadır özgürlüğü elde (Evlenecek, sen özgürlüğünü kaybetmiş ve Kontrol. Boşandın, sadece uygulamış inversiyon kontrol ediliyor. Yani, biz. İyi bir bilgisayar sistemi olarak adlandırılan "ayrıştırma" ne bazı çok yakın bir ilişki etmemektedir.) daha fazla esneklik (ofisinizde mutfak içmek istediğinizde, bu senin tek seçenek temiz musluk suyu hizmet vermektedir sadece. patronunuz yeni bir kahve makinesi kurarak Kontrol inversiyon uyguladı. Şimdi almak musluk suyu ya da kahve ya seçmenin esnekliği.) ve daha az bağımlılık (Ortağın bir işin yok, bir işi vardır, sen maddi sen kontrol edilir böylece. Sen, Kontrol Tersi uygulayan bir iş bulmak, eşiniz bağlıdır. İyi bir bilgisayar sistemi içinde bağımlılık teşvik eder.)

Bir masaüstü bilgisayar kullandığınızda, (ya demek, kontrollü) köle var. Bir ekran önce oturmak zorunda ve ona bak. yazmak için klavyeyi kullanma ve gezinmek için fareyi kullanarak. Ve bir kötü yazılmış bir yazılım daha da fazla köle olabilir. Eğer bir dizüstü bilgisayar ile masaüstü değiştirirseniz, o zaman biraz kontrolünü ters. Kolayca götürün ve etrafında hareket edebilir. Eğer bilgisayarınızla birlikte nerede Şimdi sen yerine bilgisayarınız kontrol etmenin, kontrol edebilir.

Kontrol ters çevirmeyi uygulayarak, bir yazılım / nesne tüketici yerine kontrollü veya daha az seçenek sahip olma, yazılım / nesneleri üzerinde daha denetimleri / seçenekler olsun.

akılda yukarıdaki fikirlerle. Biz hala IoC önemli bir bölümünü kaçırmayın. IOC senaryoda, yazılım / nesne tüketici sofistike çerçevesidir. Yani oluşturduğunuz kod kendiniz denilen anlamına gelir. Şimdi bu şekilde bir web uygulaması için daha iyi çalışır neden en anlatalım.

Kodunuz işçilerin bir gruptur varsayalım. Onlar bir araba inşa etmek gerekir. Bu işçiler arabayı yapmak için bir yer ve araçlar (bir yazılım çerçevesi) gerekir. Bir geleneksel yazılım çerçevesi birçok araç ile bir garaj gibi olacak. Yani işçiler BİR PLANI kendileri yapacaklardır ve arabayı yapmak için araçları kullanmak gerekir. Işçiler planlamak ve düzgün işbirliği yapmak için bir araba Bina kolay bir iş değildir, bu gerçekten zor olacak. bir ModernYazılım çerçeve yerde tüm imkanları ve yöneticileri ile modern otomobil fabrikası gibi olacak. işçiler herhangi bir plan yapmak gerekmez, yöneticiler (çerçevesinin parçası, onlar en akıllı insanlar ve en sofistike planı yapılmış) işçiler (framework kodunuzu çağırır) onların işi yapmak için zaman bilmek böylece koordine yardımcı olacaktır. işçiler sadece (Bağımlılık Injection kullanarak) yöneticileri kendilerine vermek alet kullanacak kadar esnek olması gerekir.

işçiler yöneticileri (framework) üst düzeyde proje yönetme kontrol vermek rağmen. Fakat bazı profesyoneller yardım için iyidir. Bu gerçekten geliyor IoC kavramıdır.

MVC mimarisi ile modern Web uygulamaları URL Yönlendirme yapmak ve aramaya çerçevede boyunca yerinde Kontrolörleri koymak için çerçeve bağlıdır.

Kontrol Bağımlılık Enjeksiyon ve İnversiyon ilişkilidir. Bağımlılık Enjeksiyon olan mikro düzeyde ve Kontrol Inversion olan makro düzeyde. Bir yemek (IOC uygulamak) bitirmek için (DI uygulamak) her lokma yemek zorunda.

Cevap 04/03/2013 saat 20:33
kaynak kullanıcı

oy
72

Kontrol inversiyon kullanmadan önce onun artıları ve eksileri vardır ve bunu yaparsanız bunu kullanmak neden bilmeli gerçeğinin farkında olmalıdır.

Artıları:

  • Kolayca alternatif uygulamalar ile bir arayüz uygulamalarını alışverişi böylece Kodunuz ayrılmış olur
  • Bu arayüzler yerine uygulamalara karşı kodlama için güçlü bir motivasyon olduğunu
  • o onun kurucu / ayarlayıcıları kabul nesnelerden daha başka bir şey bağlıdır ve kolayca tek başına doğru nesnelerle onları başlatmaya sağladığı için kodu için birim testleri yazmak çok kolaydır.

Eksileri:

  • IoC programınızda denetim akışı, aynı zamanda önemli ölçüde bunu bulutları tersine çevirir sadece. Bu normalde kodunuzu olacağını bağlantıları artık kodda değildir çünkü artık sadece bir yerden diğerine kodunuzu ve atlama okuyabilir anlamına gelir. Bunun yerine, XML yapılandırma dosyaları veya ek açıklamalarda ve bu meta verileri yorumlama senin IoC kabın kodu gönderiyor.
  • Orada XML yapılandırma veya açıklamalarınız yanlış hataların yeni bir sınıf ortaya çıkar ve IoC konteyner belirli koşullar altında nesnelerin birine bir null başvuru enjekte neden bulma çok zaman geçirebilirsiniz.

Şahsen IoC güçlü noktalarını görmek ve gerçekten onlar gibi ama artık bir araya koymak gereken bir "gerçek" programına ama sadece bir şey teşkil sınıfların bir koleksiyon haline yazılım döner çünkü mümkün olduğunda IoC önlemek eğilimindedir XML yapılandırma veya ek açıklama meta verileri ve ayrı onsuz düşmek (ve düşer) olacaktır.

Cevap 12/02/2010 saat 15:31
kaynak kullanıcı

oy
55
  1. Vikipedi Makale . Bana göre, kontrolün inversiyon sizin sırayla yazılmış kod çeviriyor ve bir heyet yapısına dönüştürerek. Belli şeylerin olması yerine açıkça herşeyi kontrol programınızın, programınız çağrılacak belirli fonksiyonlara sahip bir sınıf veya kitaplık kurar.

  2. Bu kod tekrarını çözer. Örneğin, eski günlerde el kendi olay döngü, taramayı yeni olaylar için sistem kütüphaneleri yazardı. Günümüzde en modern API'ler sadece ilgilendiğiniz hangi olayların sistem kütüphaneleri anlatmak ve onlar gerçekleştiğinde size bildireceğiz.

  3. kontrolün inversiyon kod tekrarını azaltmak için pratik bir yoldur ve kendinizi bütün bir yöntem kopyalayarak ve sadece küçük bir kod parçası değişen bulursanız, kontrol inversiyon ile mücadele düşünebilirsiniz. kontrolün inversiyon delegeleri, arayüzler, hatta çiğ işlev işaretçileri kavramı aracılığıyla birçok dilde kolay hale getirilmiştir.

    Bir programın akışı bu şekilde yazılı zaman takip etmek zor olabilir, çünkü her durumda kullanmak uygun değildir. Bu yeniden bir kitaplık yazarken yöntemleri tasarlamak için kullanışlı bir yoldur, ama gerçekten bir kod çoğaltılması sorunu çözer sürece kendi programın özüne idareli kullanılmalıdır.

Cevap 06/08/2008 saat 05:33
kaynak kullanıcı

oy
38

Ama onunla çok dikkatli olmak zorunda düşünüyorum. Bu desen gereğinden fazla olacaksa, çok karmaşık bir tasarıma ve daha da karmaşık bir kod yapacak.

TextEditor ile bu örnekte ki gibi: Yalnızca bir SpellChecker varsa belki IoC kullanmak gerçekten gerekli değildir? Sürece birim testleri veya bir şeyler yazmak gerekiyor ...

Neyse: makul ol. Tasarım deseni olan iyi uygulamalar ancak İncil vaaz olmamak. Her yerde sopa etmeyin.

Cevap 06/08/2008 saat 23:08
kaynak kullanıcı

oy
34

Eğer bir nesne olduğunu varsayalım. Ve eğer bir restorana gitmek:

IoC olmadan : Eğer "apple" için sormak ve daha fazla sorduğunuzda hep elma sunulmaktadır.

IOC ile : Sen "Meyve" isteyebilirsiniz. Sen farklı meyve size hizmet her zaman alabilirsiniz. örnek, elma, portakal, ya da su kavunun.

Eğer çeşitleri gibi Yani, belli ki, IoC tercih edilir.

Cevap 25/09/2013 saat 15:00
kaynak kullanıcı

oy
34

Bana IoC / DI çağıran nesnelere bağımlılıkları dışarı bastırıyor. Süper basit.

olmayan asabi cevap onu açmak hemen önce bir arabada bir motor takas mümkün ediliyor. herşey hakkı (arayüz) kanca varsa, iyi.

Cevap 19/09/2008 saat 03:54
kaynak kullanıcı

oy
23
  1. kontrol Ters sistemindeki bileşenlerin ve katmanlar ayrılması için kullanılan bir kalıptır. deseni inşa edildiğinde, bir bileşen halinde bağımlılıkları enjekte aracılığıyla gerçekleştirilir. Bu bağımlılıklar genellikle ileri ayrıştırılması temin arayüzler olarak verilmektedir ve test edilebilir desteklemek için. örneğin Şato Windsor, birlik, IOC / DI kaplar IoC sağlamak için kullanılabilecek araçlar (kütüphaneler) vardır. Bu araçlar üzerinde ve ömür boyu dahil basit bağımlılık yönetimi, AOP / Kesişme, politika, vb ötesinde genişletilmiş özellikleri sağlamak

  2. a. 'S bağımlılıkları yönetmekten sorumlu olmaktan bir bileşen hafifletir.
    b. Farklı ortamlarda bağımlılık uygulamaları takas olanağı sağlar.
    c. Bir bileşen bağımlılıkları alay yoluyla test edilecek verir.
    d. Bir uygulama boyunca kaynaklarının paylaşımı için bir mekanizma sağlar.

  3. a. Test güdümlü gelişimini yaparken Kritik. Test edilen bileşenler yüksek sistemin geri kalanına bağlanmış çünkü IoC olmadan, test etmek zor olabilir.
    b. Kritik modüler sistemleri geliştirirken. Modüler sistem, bileşenleri yeniden derlemesi gerektirmeden değiştirilebilen bir sistemdir.
    c. Partilarly bir kuruluş uygulamasında, ele gereken birçok kesişen kaygıları var Kritik ise.

Cevap 19/09/2008 saat 03:27
kaynak kullanıcı

oy
17

Bu iki terim benim basit anlayış yazmak zorundadır:

For quick understanding just read examples*

Bağımlılık enjeksiyon (Di):
bağımlılık enjeksiyon genel anlamı bir yöntem için bir parametre olarak, yöntem, bağlı olduğu bir nesne geçen yerine yöntem bağımlı nesne oluşturmak sahip olan .
Ne pratikte anlamı yöntem değildir, belirli bir uygulamaya doğrudan bağlıdır yapmasıdır; gereksinimlerini karşılayan herhangi bir uygulama parametre olarak geçirilebilir.

Ile bu onların bağımlılıklarını anlatmak nesneleri. Ve bahar da kullanılabilmesini sağlar.
Bu gevşek uygulama geliştirme birleştiğinde yol açar.

Quick Example:EMPLOYEE OBJECT WHEN CREATED,
              IT WILL AUTOMATICALLY CREATE ADDRESS OBJECT
   (if address is defines as dependency by Employee object)

Kontrol (IOC) Kap ters çevrilmesi:
Bu çerçeveler ortak özelliğidir, IOC Java nesneleri yönetir
- örnekleme ile ilgili yok olmasına BeanFactory yoluyla.
IoC kapsayıcı tarafından örneklenen -Java bileşenleri fasulye denir ve IoC kap fasulye kapsamını, yaşam döngüsü olaylarını ve herhangi AOP özelliklerini yönetir yapılandırıldığı ve kodlanmış olan tek için.

QUICK EXAMPLE:Inversion of Control is about getting freedom, more flexibility, and less dependency. When you are using a desktop computer, you are slaved (or say, controlled). You have to sit before a screen and look at it. Using keyboard to type and using mouse to navigate. And a bad written software can slave you even more. If you replaced your desktop with a laptop, then you somewhat inverted control. You can easily take it and move around. So now you can control where you are with your computer, instead of computer controlling it.

Kontrol ters çevirmeyi uygulayarak, bir yazılım / nesne tüketici yerine kontrollü veya daha az seçenek sahip olma, yazılım / nesneleri üzerinde daha denetimleri / seçenekler olsun.

Bir tasarım rehber olarak kontrol inversiyon aşağıdaki amaca hizmet eder:

Uygulanmasından belli bir görevin yürütülmesi bir ayrıştırma vardır.
Her modül ne için tasarlanmıştır odaklanabilirsiniz.
Modüller diğer sistemler ne yaptığımız hakkında hiçbir varsayımlar yapmak ama onların sözleşmeleri güveniyor.
Modülleri Değiştirme diğer modüllere üzerinde hiçbir yan etkisi yoktur
Buradayım, soyut şeyler tutacak Sen konunun ayrıntısı anlaşılması için aşağıdaki bağlantıları ziyaret edebilirsiniz.
Örnekle İyi bir okuma

Detaylı açıklama

Cevap 10/11/2014 saat 08:43
kaynak kullanıcı

oy
15

Örneğin, görev 1. nesneyi yaratmaktır. IOC kavramı olmadan, görev 1. IOC konsepti ile Programmer.But tarafından yapılması gerekiyordu, görev 1. kap yapmakla olur.

Kısacası Kontrol Programcı gelen kaba ters alır. Yani, kontrol inversiyon gibi adlandırılır.

Bir örnek buldum burada .

Cevap 27/01/2010 saat 13:15
kaynak kullanıcı

oy
14

sadece ilk bölümünü cevaplama. Bu ne?

Kontrol (IOC) ters çevrilmesi yerine sınıf örneği bağımlılıkları örneklerini oluşturmak sonra birinci ve sınıfının bir örneğini oluşturmak yerine, birinci bağımlılıklar ve (isteğe bağlı olarak kurucu yoluyla enjekte) bir sınıf ikinci örneğinin örneklerini oluşturmak anlamına gelir. Bu durumda, kontrol inversiyon tersine çevirir kontrol akışını programı. Yerine kontrol aranan ucun kontrol akışını (bağımlılıklar yaratırken), arayan programın kontrolü akışını kontrol eder .

Cevap 11/01/2016 saat 00:49
kaynak kullanıcı

oy
14

Neredeyse bir gürültü ismi - It "IoC" kısaltması ve savunduğu değerlerle için isim hakkında en kafa karıştırıcı şey bir ismin çok çekici olmasıdır gibi görünüyor.

Gerçekten usul ve olay güdümlü programlama arasındaki farkı açıklamak için bir ad gerekiyor mu? Tamam, gerekiyor, ama biz çözdüğünden çok kafasını karıştıran yeni bir marka "daha büyük hayattan daha" adı almak gerekir mi olur?

Cevap 19/01/2011 saat 04:50
kaynak kullanıcı

oy
13

bazı otelde bazı toplantı yapmak olduğunu söylemek edelim.

Birçok kişi, suyun birçok Carafes, birçok plastik bardak.

Biri içmek istiyorum, o fincan, içki doldurup katta fincan atmak.

saat falan sonra bir kat plastik bardaklar ve su kaplı var.

invert kontrolünü edelim.

Aynı yerde aynı toplantı, ama bunun yerine bir bardak bardak ile garson plastik bardak (Singleton)

ve o zaman bütün içme misafirler sunuyor.

Biri içmek istiyorum, o garson cam, içki almak ve garson geri dönün.

içme süreç kontrolünün hijyenik, son formun sorusunu bir kenara bırakırsak çok daha etkili ve ekonomiktir.

yapar: Ve bu tam (Guice örneğin başka IoC konteyner,) Bahar budur. Bunun yerine uygulamaya let yeni anahtar kelime (plastik bardak alarak), Bahar IoC kapsayıcı gerekli nesnenin (bardak su) uygulanması için zaman teklif aynı örneği (tekil) tüm kullanarak gerekenleri oluşturun.

Böyle toplantının düzenleyicisi olarak kendiniz düşünün. Sen otel yönetimine mesaj yolunu gerektiğini

toplantı üyeleri bardak su değil kek parçasını gerekecektir.

Örnek:-

public class MeetingMember {

    private GlassOfWater glassOfWater;

    ...

    public void setGlassOfWater(GlassOfWater glassOfWater){
        this.glassOfWater = glassOfWater;
    }
    //your glassOfWater object initialized and ready to use...
    //spring IoC  called setGlassOfWater method itself in order to
    //offer to meetingMember glassOfWater instance

}

Kullanışlı bağlantılar:-

Cevap 26/09/2012 saat 18:54
kaynak kullanıcı

oy
13

Ben katılıyorum NilObject ama buna eklemek istiyorum:

Kendini bütün bir yöntem kopyalayarak ve sadece küçük bir kod parçası değişen fark ederseniz, kontrolün tersinim ile mücadele düşünebilirsiniz

Kendini kopyalayarak ve çevresinde yapıştırarak kod bulursanız, hemen hemen her zaman yapıyoruz şey yanlış. Tasarım prensibi olarak kodlanmış kez ve sadece bir kez .

Cevap 06/08/2008 saat 06:20
kaynak kullanıcı

oy
10

IoC Kodunuzdaki ve üçüncü taraf kod (kütüphane / framework) arasındaki ilişkiyi tersini hakkındadır:

  • Normal lerde / geliştirme w, yazdığınız ana () yöntemini ve "kütüphane" yöntemleri çağırmak. Sen kontrol bulunmaktadır :)
  • IoC "çerçeve" kontrol () ana Yöntemlerine ve çağırır. Çerçeve kontrol altında :(

DI (Bağımlılık Enjeksiyon) kontrol uygulamasında nasıl akacağını ilgili. Geleneksel masaüstü uygulaması diğer kütüphane yöntemi çağrılarına uygulamanıza (ana () yöntemi) kontrol akışını vardı, ama DI denetim akışı tersine çevrilir o çerçeve uygulamanızı başlayan başlatılıyor ve gerektiğinde yöntemlerinizi çağırma ilgilenir bu.

Sonunda her zaman kazanmak :)

Cevap 19/09/2014 saat 19:25
kaynak kullanıcı

oy
7

Bağımlılık enjeksiyon nesne grafiği yapı (nesneler yerine başka bir nesneye referans almak için nasıl kontrol nesnesinin kendisi dışında, birbirine referans nasıl yani konfigürasyon kontrol) için bir tasarım modeli olarak bu prensibi fark ise Kontrol Ters, genel bir ilkedir.

Bir tasarım deseni olarak Kontrol Inversion baktığımızda, biz tersini ne bakmak gerekir. Bağımlılık enjeksiyon nesnelerin bir grafik oluşturmak kontrolünü tersine çevirir. meslekten olmayan vadede söyleseydim, kontrolün inversiyon programında kontrolün akışındaki değişimi ima eder. Örneğin. kontrolü (biz üçüncü parti kütüphane işlevini kullanmış durumunda) diğer üçüncü taraf kütüphanelere geçirilen yerden geleneksel bağımsız uygulamasında, biz, ana yöntem vardır, ancak bu denetim kontrolünün ters aracılığıyla koda üçüncü parti kütüphane kodundan transfer alır biz üçüncü şahıs kütüphanenin hizmet alıyor gibi. kodu çalıştırmak için yöntemler örneğin çağırma ve ipler - Ama diğer bir program dahilinde ters gereken yönleri vardır.

Ofis kalıpları kullanarak yazılım tasarımını geliştirmek için: Kontrol Inversion üzerinde daha derinlemesine ilgilenenler için bir kağıt, bir tasarım modeli olarak Kontrol İnversiyon daha eksiksiz bir resim (OfficeFloor özetleyen yayımlandı http://doi.acm.org/10.1145/ 2739011.2739013 kullanılabilen ücretsiz kopyası ile indirmek için http://www.officefloor.net/mission.html )

Ne tanımlanır aşağıdaki ilişkidir:

(Yöntemleri için) Kontrol Ters = Bağımlılık (durum) enjeksiyon + devam Enjektabl + Konu Enjeksiyon

Cevap 29/10/2015 saat 04:27
kaynak kullanıcı

oy
7

Programlama konuşan

IoC kolay açısından: Bazı sınıflar tarafından kullanılabilecek bir joker gibi özel bir şey (örneğin bir alanda ya da bir parametre) bir yolu olarak Arayüzü yaramaz. Bu kodun yeniden kullanılabilirliği sağlar.

: Örneğin, iki sınıfları olduğunu varsayalım Köpek ve Kedi . Hem / aynı kaliteye paylaşan devletler: yaş, boyut, ağırlık. Bunun yerine denilen hizmetin sınıf oluşturulmasının DogService ve CATservice , ben tek tek denilen oluşturabilirsiniz AnimalService onlar arayüzü kullanmak yalnızca Köpek ve Kedi kullanmanızı sağlar IAnimal .

Ancak, pragmatik olarak konuşursak, geriye bazılarına sahiptir.

a) geliştiricilerin çoğu nasıl kullanılacağını bilmiyorum . Örneğin, ben bir sınıf olarak adlandırılan oluşturabilir Müşteri ve otomatik olarak oluşturabilir adında bir arayüz (IDE araçları kullanarak) ICustomer . Yani, sınıflar ve arabirimler, arabirimler yeniden açılıp açılmayacağı ise hiçbir madde ile dolu bir klasör bulmak için nadir değildir. Bu BLOATED denir. Bazı insanlar "Gelecekte bunu kullanabiliriz olabilir" iddia olabilir. : - |

b) Bazı sınırlamalar vardır. Örneğin, söz konusu bahsedelim Dog ve Kedi ve sadece köpekler için yeni bir hizmet (işlevsellik) eklemek istiyorum. I Bir köpek (eğitmek gerekir gün sayısını hesaplamak istediğinizi varsayalım trainDays()(ki şaka yapıyorum) kediler eğitilmiş edilemez, bu yararsız kedi için).

Ben eklerseniz b.1) trainDays()Servis için AnimalService o zaman da kedi ile çalışır ve bu hiç geçerli değil.

b.2) içinde bir koşul ekleyebilir trainDays(), kullanıldığı sınıfı değerlendirmektedir. Ama tamamen IoC kıracak.

Ben hizmet yeni bir sınıf oluşturabilir b.3) denilen DogService sadece yeni işlevsellik için. Ama biz için (benzer işlevlere sahip) hizmetinin iki sınıfları olacaktır çünkü kod yaşatılabilirlik artacak Dog ve kötü.

Cevap 19/04/2015 saat 12:07
kaynak kullanıcı

oy
7

Çok basit yazılı açıklama burada bulunabilir

http://binstock.blogspot.in/2008/01/excellent-explanation-of-dependency.html

diyor ki

"Herhangi nontrivial uygulama, bazı iş mantığını gerçekleştirmek için birbirleriyle işbirliği iki veya daha fazla sınıfların oluşur. Geleneksel olarak, her nesne (bağımlılıklarından) ile işbirliği nesnelere kendi referanslarını almakla sorumludur. DI, uygularken nesneleri sistemdeki her nesne koordinatları bazı dış varlık tarafından oluşturulması zamanda kendi bağımlılıkları verilir. başka bir deyişle, bağımlılıkları nesneler enjekte edilir."

Cevap 22/02/2013 saat 15:13
kaynak kullanıcı

oy
6

Ben bu açıklamayı istiyorum: http://joelabrahamsson.com/inversion-of-control-an-introduction-with-examples-in-net/

Çok basit başlamak ve aynı zamanda kod örnekleri gösterir.

Burada görüntü açıklama girin

Tüketici, X, bir şeyler başarmak için tüketilen sınıfı, Y, ihtiyacı vardır. Bu iyi ve doğal, hepsi ama X'in gerçekten Y kullandığı bilmek gerekir?

o X'in aslında davranışı uygular kim olduğunu bilmeden Y, vb yöntemleri, özellikleri davranışı olan bir şey kullandığını bilmesi yetmez mi?

Aşağıdaki I olarak gösterilen Y X tarafından kullanılan davranış soyut bir tanımını ayıklanması ve Y. hakkında özelliklerini bilmek zorunda kalmadan yerine Y o ne yaptığını yapmaya devam edebilir tüketici X'in bunun bir örneğini kullanmak izin vererek

Burada görüntü açıklama girin

Y yukarıda illüstrasyon I uygular ve X'in hala Y kullandığı oldukça mümkün olsa X'in I'in bir örneğini kullanır ise ilginç olan X bilmiyor olmasıdır. Sadece o I. uygulayan bir şeyi kullanır bilir

Daha fazla bilgi almak ve bu şekilde faydaları açıklaması için makalesini okuyun:

  • X artık Y bağlı değildir
  • Daha esnek, uygulama çalışma zamanında karar verilebilir
  • Kod biriminin İzolasyonu, daha kolay test

...

Cevap 16/02/2017 saat 02:03
kaynak kullanıcı

oy
4

kontrolün inversiyon müşteriye kütüphaneden denetim transferini hakkındadır. Bu kontrol bir yüksek mertebeden fonksiyonu (kütüphane fonksiyonu) içine bir işlev değeri (lamda ifade) enjekte (geçer) bir müşteri söz daha mantıklı (değişiklikler) kütüphane işlevinin davranışını yapar. kütüphaneler içine (davranışı taşıyan) kütüphane bağımlılıklarını enjekte Bir müşteri ya da çerçeve de IoC düşünülebilir

Cevap 24/12/2017 saat 18:34
kaynak kullanıcı

oy
4

Ben çok net bir örnek buldum burada 'kontrol ters çevrildiğinde' nasıl açıklar.

Klasik kodu (Bağımlılık enjeksiyonu olmadan)

İşte DI kullanmayan bir kod kabaca nasıl çalışacağını geçerli:

  • Uygulama fan (örneğin, bir kontrol cihazı), bu yüzden:
  • Uygulama Foo yaratır
  • Uygulama Foo çağırır
    • Foo Bar (örneğin bir hizmeti) gerekir, bu nedenle:
    • Foo Bar yaratır
    • Foo Bar çağırır
      • Bar Bim (bir hizmeti, bir depo, ...) gerekir, bu nedenle:
      • Bar Bim yaratır
      • Bar şey yapar

bağımlılık enjeksiyon kullanarak

İşte DI kullanarak bir kod kabaca nasıl çalışacağını geçerli:

  • böylece, Bim ihtiyacı Bar ihtiyacı Uygulama ihtiyacı Foo,:
  • Uygulama Bim yaratır
  • Uygulama Çubuğu oluşturup Bim verir
  • Uygulama Foo oluşturup Bar verir
  • Uygulama Foo çağırır
    • Foo Bar çağırır
      • Bar şey yapar

bağımlılıkları kontrol bir arama için çağrıldığını birinden ters çevrilir.

Hangi sorunları çözer?

Bağımlılık enjeksiyon kolay enjekte sınıfların farklı uygulanması ile takas yapar. Birim test ederken size çok daha kolay test yapan bir kukla uygulanmasını enjekte edebilir.

Ör: Başvurunuz denetleyicisi kod aşağıdaki gibi görünebilir DI ile Google Drive'da kullanıcı tarafından yüklenen bir dosya, depolar varsayalım:

class SomeController
{
    private $storage;

    function __construct(StorageServiceInterface $storage)
    {
        $this->storage = $storage;
    }

    public function myFunction () 
    {
        return $this->storage->getFile($fileName);
    }
}

class GoogleDriveService implements StorageServiceInterface
{
    public function authenticate($user) {}
    public function putFile($file) {}
    public function getFile($file) {}
}

senin gereksinimleri söylemek değişir zaman yerine, Google Drive size Dropbox'ı kullanmaları gerekmektedir. Yalnızca StorageServiceInterface için dropbox'ı uygulama yazmak gerekir. Sürece Dropbox uygulaması StorageServiceInterface aşmaması koşuluyla denetleyicisi herhangi bir değişiklik yok.

tüm yöntemler boş dönmek kukla uygulanması (veya test şartının her türlü önceden tanımlanmış değer) ile StorageServiceInterface için alay oluşturabilir test ederken.

Bunun yerine eğer depolama nesnesini oluşturmak için denetleyici sınıfını vardı newböyle anahtar kelime:

class SomeController
{
    private $storage;

    function __construct()
    {
        $this->storage = new GoogleDriveService();
    }

    public function myFunction () 
    {
        return $this->storage->getFile($fileName);
    }
}

Dropbox uygulaması ile değiştirmek istediğinizde tüm satırları değiştirmek zorunda newGoogleDriveService nesne inşa ve DropboxService kullanmak edilir. SomeController sınıfını test ederken yanında yapıcı daima GoogleDriveService sınıf ve bu sınıfın fiili yöntemler tetiklenir bekliyor.

Değilken Ne zaman mülk ve? Eğer bir sınıfın alternatif uygulama vardır (ya da söz konusu olabilir) dendiğinde Bence sen DI kullanın.

Cevap 04/11/2017 saat 13:27
kaynak kullanıcı

oy
4

Cevabın burada zaten verilmiş olduğunu anlıyoruz. Ama yine de kontrolün ters hakkında bazı temel bilgiler ileride okuyucuları için uzunluğunda Burada tartışılan lazım, düşünüyorum.

Kontrol inversiyon (IOC) denilen çok basit bir prensip üzerine inşa edilmiştir Hollywood'un Prensibi . Ve diyor ki

bizi arayın etmeyin, biz sizi arayalım

Bu demek ki, daha sonra Hollywood'un sizi bulmasına ve rüya gerçek oluyor yapacak layık doğrusu eğer rüya yerine getirmek için Hollywood'a gitmek kalmamasıdır. Hemen hemen ters, ha?

Biz IoC prensibi hakkında tartışmak Şimdi, biz Hollywood'da unutmak için kullanın. IoC, üç eleman, bir Hollywood olmalı, sen ve bir görev rüya yerine getirmek ister.

Bizim programlama dünyasında, Hollywood'un , (sizin veya bir başkasının yazdığı olabilir) genel çerçeveyi temsil sen yazdığın kullanıcı kodu ve temsil görevi size koduyla başarmak istediğiniz şeyi temsil eder. Artık asla değil IoC, kendiniz görevi tetiklemek için gitmeyin! Aksine sizin çerçeve sizin için görev tetikleyecek şekilde her şeyi tasarladık. Böylece birisi bir kahraman ya da başka bir kötü adam yapabilir yeniden kullanılabilir bir çerçeve oluşturduk. Ama bu çerçeve Birini seçmek ve birisi sadece olmasını istediğini bilen o zaman bilir, her zaman sorumlu.

Gerçek hayat örneği burada verilecek. Bir web uygulaması geliştirmek istiyor varsayalım. Yani, bir web uygulaması vb olayları tetikleyen, kurabiye yönetmek, sayfaları hizmet veren uygulama menüsünü oluştururken, http isteğini ele gibi işlemesi gerektiğini tüm ortak şeyleri idare edecek bir çerçeve oluşturmak

Özel menü, sayfaları, çerezler oluşturmak için başka kodlar koymak veya her tarayıcı İstek üzerine vs. bazı kullanıcı olayları günlüğe nereye Ve sonra çerçevesinde bazı kanca bırakın, çerçeve çalıştırın ve sonra bağladım geri hizmet eğer özel kodları çalıştırır olacak tarayıcıya.

Yani, fikir, hemen hemen basittir. Aksine her şeyi kontrol edecek bir kullanıcı uygulamayı oluşturmak yerine, öncelikle daha sonra her şeyi kontrol özel kodları yazmak ve zaman içinde bu yürütmek için iskelet üzerine kanca yeniden kullanılabilir bir çerçeve oluşturmak.

Laravel ve EJB, böyle bir çerçeve örnekleridir.

Referans:

https://martinfowler.com/bliki/InversionOfControl.html

https://en.wikipedia.org/wiki/Inversion_of_control

Cevap 01/10/2017 saat 11:24
kaynak kullanıcı

oy
4

IoC da bağımlılık enjeksiyon (Di) olarak da bilinir. Bu nesneler, yani, sadece bu inşa edilmiş ya da fabrika yöntemi döndürülen sonra nesne örneği ayarlanır kurucu bağımsız bir fabrika yöntemine bağımsız değişken ya da özellikleri aracılığıyla, birlikte çalışan diğer nesneleri bağımlılıklarını tanımlamak sağlayan bir işlemdir . o fasulye oluşturduğunda konteyner daha sonra bu bağımlılıkları enjekte eder. Bu işlem temelde sınıfların doğrudan inşaat veya Servis Arama deseni gibi bir düzenek kullanılarak bağımlılıklarından örneğinin veya konumunu kontrol fasulye kendisinin tersi, kontrol (IOC) bu nedenle adı Ters olduğu

İlkbahar-çerçeve-referance.pfd sayfa 27 (tüm pdf belge sayfaları hariç, bu sayfa 51'de ise)

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/pdf/spring-framework-reference.pdf

Cevap 24/01/2013 saat 15:52
kaynak kullanıcı

oy
3

Kontrolün inversiyon bakkal gidip karınız size satın ürünlerin listesini verdiğinde olduğunu.

Programlama açısından o bir geri çağırma işlevi geçti getProductList(), yürütme işlevine doShopping();

Bu fonksiyonun kullanıcı daha esnek hale bunun bazı kısımları tanımlamak için izin verir.

Cevap 15/12/2017 saat 18:35
kaynak kullanıcı

oy
3

soyutlama ve inversiyon: konsepti anlamak için, Kontrolü (IOC) veya Bağımlılık Inversion İlke (DIP) tersyüz iki aktiviteyi içermektedir. Bağımlılık Enjeksiyon (DI) sadece inversiyon yöntemlerinin birkaç biridir.

Bu konuda daha fazla bilgi edinmek için sen blogumu okuyabilirsiniz Burada

  1. Bu ne?

Size (Object Oriented Programlama Sınıf) sınır dışından gelen fiili davranışı sağlayan bir uygulamadır. Sınır tarafın yalnızca soyutlama bilir (örn arayüzü, soyut sınıf, Object Oriented Programlama temsilci) bunun.

  1. Hangi sorunları çözer?

programlamanın vadede, IOC, çeşitli bölümlerine ayırımı, bu modüler yaparak monolitik kodunu çözmeye ve birim test edilebilir olun.

  1. değilken Ne zaman mülk ve?

size sadece monolitik kod istediğiniz durum var sürece, çoğu zaman uygun olur (örneğin çok basit bir program)

Cevap 03/06/2016 saat 01:46
kaynak kullanıcı

oy
3

sınıf içinde bir nesne oluşturma sıkı bağlama denir, Bahar bir tasarım modeli (Di / IOC) izleyerek bu bağımlılığı ortadan kaldırır. Hangi sınıf nesnesi de yapıcı yerine sınıfında oluşturma geçirilir. daha genel bir yapısını tanımlamak için yapıcı süper sınıf referans değişken vermek üzerinde daha fazla.

Cevap 13/05/2015 saat 08:52
kaynak kullanıcı

oy
3
  1. Yani 1 numara yukarıda . Kontrol Tersi nedir?

  2. Bakım benim için çözer numaralı şeydir. O iki sınıfları birbiriyle samimi değildir bu yüzden arayüzler kullanıyorum garanti eder.

Kale Windsor gibi bir kap kullanarak, bu daha da iyi bakım sorunları çözer. kod satırı değiştirmeden dosya tabanlı kalıcılığını kullanan biri için bir veritabanına giden bir bileşeni takas yapabilme (yapılandırma değişikliği bitirdiniz) harika.

Eğer jenerik içine almak Ve bir kez, hatta daha iyi olur. kayıtları alır ve mesajları yayınlayan bir mesaj yayıncı sahip düşünün. O yayınlar umursamıyor, ama bir iletiye rekor bir şey almak bir mapper ihtiyacı var.

public class MessagePublisher<RECORD,MESSAGE>
{
    public MessagePublisher(IMapper<RECORD,MESSAGE> mapper,IRemoteEndpoint endPointToSendTo)
    {
      //setup
    }
}

Bir keresinde yazdım ama farklı türde iletiler yayınlamak eğer şimdi bu kod kümesi içine birçok türde enjekte edebilir. Ben de aynı türden bir kaydını almak ve farklı iletilere bunları harita haritacıları yazabilir. Jenerik ile DI kullanmak bana birçok görevi yerine getirmek için çok az kod yazmak için yeteneği vermiştir.

Ah evet, orada test edilebilirlik endişeler vardır, ama bunlar IoC / DI yararları ikinci derecede önemlidir.

Kesinlikle IoC / DI seviyorum.

3. Bu biraz daha karmaşıklık orta boy projesi var dakika daha uygun hale gelir. Ben acı hissi başlar dakika uygun hale söyleyebilirim.

Cevap 19/09/2008 saat 05:59
kaynak kullanıcı

oy
2

Eğer nesneleri new'ing değildir IoC kullanma. Kişisel IoC konteyner bunu ve bunların ömrünü yönetecek.

Manuel diğerine tek bir nesne türü her örnekleme değiştirmek zorunda sorununu çözer.

Eğer gelecekte değişebilir ya da kullanılan ortamda veya yapılandırmasına bağlı olarak farklı olabilir özelliğe sahip zaman uygundur.

Cevap 16/07/2015 saat 16:06
kaynak kullanıcı

oy
1

Java EE (anda J2EE) ilk sürümü konteyner iş kod kontrol altına almak ve (işlemlerdeki veya güvenlik yönetimi gibi) teknik hizmetler sunmak olduğu anlamına gelen, kontrol (IOC) inversiyon kavramını tanıttı.

Cevap 03/04/2017 saat 22:42
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more