Mengapa pola injeksi ketergantungan tidak termasuk dalam Geng empat?


37

Mengapa pola injeksi ketergantungan tidak dimasukkan dalam geng empat ? Apakah GOF melakukan pre-date pengujian otomatis luas? Apakah injeksi ketergantungan sekarang dianggap sebagai pola inti?


18
.. karena "injeksi Ketergantungan" bukan pola!
Dipan Mehta


14
Segala sesuatu yang diulang membentuk pola pengulangan. Semua elemen desain (yang tidak unik, ide gila) adalah "pola".
S.Lott

3
Tanggapan panjang ini mungkin menyesatkan, karena mereka semacam memvalidasi pertanyaan. Sementara, sebagaimana disebutkan, ketergantungan injeksi bukan pola desain. Ini adalah "mekanisme" untuk instance objek, biasanya ditangani oleh framework.
Nazar Merza

1
Ketergantungan injeksi adalah sebuah pola . Itu menentang pola Service Locator. Baca Fowler yang menciptakan istilah. Saya sama sekali tidak tahu berapa banyak orang yang mengingkari omong kosong semacam itu.
James

Jawaban:


101

Saya adalah editor majalah Pengembangan Perangkat Lunak ketika buku Gang of Four keluar dan saya dapat mengatakan dengan penuh keyakinan bahwa pengujian unit bukanlah praktik yang meluas pada tahun 1994, ketika Pola Desain awalnya diterbitkan.

Pada tahun 1994, C ++ adalah bahasa berorientasi objek yang paling umum digunakan, dan kebanyakan orang memprogramnya berasal dari latar belakang C. Salah satu hal "berpikir dalam benda" yang tidak dimiliki orang adalah gagasan ratusan atau ribuan titik masuk ke dalam program Anda. Anda memikirkan tentang main(). Jika Anda bekerja pada proyek besar, Anda mungkin memiliki makefile (biasanya cukup rumit) untuk membuat program berbasis modul. Tapi "unit-testing"? Memulai proses, membangun konteks memori yang diperlukan, menjalankannya, dan menghancurkannya, berdasarkan metode ? Itu sangat radikal.

Java membuat pemrograman multi-entry-point lebih jelas. Pada saat booming Dot-Com asli, pengujian unit adalah teknik yang terkenal, tetapi itu benar-benar JUnit (sekitar tahun 2001?) Yang menyebabkannya terbakar dan menjadi praktik universal.

Meskipun Strategi dan konsep umum pemrograman ke antarmuka adalah bagian dari GoF dan zeitgeist pertengahan 90-an, gagasan injeksi datang cukup terlambat ke pesta (sekitar tahun '03 -'05?). Jujur, rambut uban saya masih cukup meragukan tentang aspek DI ("Lepaskan halaman saya, Anda sialan file konfigurasi!").


17
Saya menyesal bahwa saya hanya memiliki satu suara untuk memberikan jawaban yang berwawasan luas.

@Larry OBrien: pemindaian untuk pendaftaran berbasis konvensi sangat menyederhanakan kode konfigurasi dan praktis menghilangkan konfigurasi xml dalam wadah ioc.
quentin-starin

4
Saya ingin menambahkan bahwa ketergantungan injeksi pada intinya tidak bergantung pada file konfigurasi sama sekali. Anda dapat melakukan semuanya dengan tangan, yang membuatnya sangat mudah digunakan dan masih merupakan pendekatan yang sangat fleksibel.
marco-fiset

31

Mereka menyebutnya Strategi .

Strategi mereka tampaknya memiliki semua fitur injeksi ketergantungan tanpa nama yang terdengar rumit.


16
-1. Maaf! Pola strategi tidak ada hubungannya dengan Injeksi Ketergantungan.
Dipan Mehta


14
@Dipan: sebelum mengundurkan diri, Anda sebaiknya memikirkan jawabannya lima menit.
Doc Brown

6
memang benar bahwa Ketergantungan Injeksi dapat dianggap sangat mirip dengan Pola Strategi, tetapi ketika orang mengatakan injeksi ketergantungan mereka biasanya berarti Inversion of Control, yang saya pikir jauh lebih berbeda dari Strategi (terutama wadah IoC).
MattDavey

8
DI lebih merupakan pola kreasi. Itu menciptakan dan menyuntikkan strategi. Mengatakan itu strategi hanyalah setengah kebenaran. DI lebih merupakan pola microkernel! Saya tidak percaya orang-orang tidak menghargai ini. Strategi lebih seperti sifat DI yang baik, bukan keharusan.
Falcon

0

Saya pikir Ketergantungan Injeksi lebih relevan ketika memisahkan implementasi di tingkatan. Area lain di mana kami berpikir tentang injeksi ketergantungan adalah pengujian unit. Dan saran pra-tanggal Anda tampaknya benar. Jika geng itu mengumpulkan dan memisahkan pola pada 2012, pasti injeksi ketergantungan akan ada di sana.

Strategi dapat muncul dalam diskusi tetapi Strategi tidak berbicara tentang suntikan ketergantungan. Tetapi ketika menggunakan pola strategi dalam satu proyek atau dll (semua kelas dan antarmuka tetap dalam satu proyek) tampaknya kita melakukan injeksi dependensi. Sebenarnya kita tidak.

Sekarang, jika kelas dan antarmuka yang disebutkan dalam pola strategi dipisahkan dalam proyek atau tingkatan yang berbeda maka KAMI harus menggunakan teknik injeksi ketergantungan. Kita dapat menggunakan file konfigurasi kesatuan (meskipun tidak ada perubahan runtime yang mungkin terjadi). Tetapi pola Strategi tidak mengatakan bagaimana menyuntikkan ketergantungan.

Jika ada pola yang sangat mirip dengan injeksi Ketergantungan maka itu adalah pola Metode Pabrik Abstrak. Pola ini dapat digunakan di dalam pola strategi untuk menyuntikkan ketergantungan.


2
Ini tidak menjawab pertanyaan. Silakan baca pertanyaan asli alih-alih menjawab jawaban lain :)
Andres F.

-4

jawabannya adalah Strategi 100% benar. Saya memilih itu tetapi bisa berkomentar.

"Strategi memungkinkan algoritma bervariasi secara independen dari klien yang menggunakannya. [1] Strategi adalah salah satu pola yang termasuk dalam buku Pola Desain berpengaruh oleh Gamma et al. Yang mempopulerkan konsep menggunakan pola untuk menggambarkan desain perangkat lunak."

Pola desain tidak tergantung pada penggunaannya. Injeksi Ketergantungan diimplementasikan dengan menggunakan pola Strategi. Jika kita menamai setiap pola berdasarkan use case kita harus mengganti nama banyak pola.

Pola repositori bukan pola baru, itu adalah Pola Templat.

"Dalam metode templat pola desain ini, satu atau beberapa langkah algoritma dapat ditimpa oleh subclass untuk memungkinkan perilaku yang berbeda sambil memastikan bahwa algoritma menyeluruh masih diikuti."

Seringkali polanya adalah beberapa pola yang digabungkan dan dinamai seperti pola MVC.

GOF tidak memiliki antarmuka kelas Abstrak Murni yang digunakan, dan juga memanfaatkan kemampuan C ++ untuk mewarisi dari lebih dari satu kelas.


1
Tujuan suatu pola mutlak penting dalam membedakan. Di antara pola GoF, Adaptor dan Proxy adalah contoh yang bagus - mereka memiliki bentuk yang sama, tetapi tujuannya berbeda. Saya juga tidak setuju dengan pernyataan Anda bahwa DI diterapkan menggunakan Strategi; Strategi lebih spesifik dalam tujuannya dan cara objek yang dikonfigurasi digunakan, jadi lebih masuk akal untuk mengatakan bahwa Strategi diimplementasikan dengan DI.
Jules
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.