Ada banyak alasan mengapa global jahat di OOP.
Jika jumlah atau ukuran objek yang perlu dibagi terlalu besar untuk secara efisien diteruskan dalam parameter fungsi, biasanya semua orang merekomendasikan Dependency Injection daripada objek global.
Namun, dalam kasus di mana hampir semua orang perlu tahu tentang struktur data tertentu, mengapa Ketergantungan Injeksi lebih baik daripada objek global?
Contoh (yang disederhanakan, untuk menunjukkan titik secara umum, tanpa menggali terlalu dalam pada aplikasi tertentu)
Ada sejumlah kendaraan virtual yang memiliki sejumlah besar properti dan status, dari jenis, nama, warna, hingga kecepatan, posisi, dll. Sejumlah pengguna dapat mengendalikan mereka secara jarak jauh, dan sejumlah besar peristiwa (baik pengguna- dimulai dan otomatis) dapat mengubah banyak status atau properti mereka.
Solusi naif adalah dengan hanya membuat wadah global mereka, seperti
vector<Vehicle> vehicles;
yang dapat diakses dari mana saja.
Solusi yang lebih ramah-OOP adalah membuat wadah menjadi anggota kelas yang menangani loop peristiwa utama, dan digunakan di konstruktornya. Setiap kelas yang membutuhkannya, dan anggota dari utas utama, akan diberikan akses ke wadah melalui pointer di konstruktor mereka. Misalnya, jika pesan eksternal masuk melalui koneksi jaringan, kelas (satu untuk setiap koneksi) yang menangani parsing akan mengambil alih, dan parser akan memiliki akses ke wadah melalui pointer atau referensi. Sekarang jika pesan yang diuraikan menghasilkan perubahan pada elemen wadah, atau mengharuskan beberapa data keluar untuk melakukan suatu tindakan, itu dapat ditangani tanpa perlu melemparkan sekitar ribuan variabel melalui sinyal dan slot (atau lebih buruk, menyimpannya di parser untuk kemudian diambil oleh orang yang disebut parser). Tentu saja, semua kelas yang menerima akses ke wadah melalui injeksi ketergantungan, adalah bagian dari utas yang sama. Utas yang berbeda tidak akan langsung mengaksesnya, tetapi melakukan tugasnya dan kemudian mengirim sinyal ke utas utama, dan slot di utas utama akan memperbarui wadah.
Namun, jika sebagian besar kelas akan mendapatkan akses ke wadah, apa yang membuatnya sangat berbeda dari global? Jika begitu banyak kelas membutuhkan data dalam wadah, bukankah "cara injeksi ketergantungan" hanya global yang disamarkan?
Satu jawaban adalah keamanan utas: meskipun saya berhati-hati untuk tidak menyalahgunakan wadah global, mungkin pengembang lain di masa depan, di bawah tekanan tenggat waktu yang dekat, namun akan menggunakan wadah global dalam utas yang berbeda, tanpa mengurus semua kasus tabrakan. Namun, bahkan dalam kasus injeksi dependensi, seseorang dapat memberikan pointer kepada seseorang yang menjalankan thread lain, yang mengarah ke masalah yang sama.