@Bigown: Anda harus "menerima" jawaban yang paling Anda sukai. Jika Anda tidak menyukai jawaban apa pun, silakan berikan hadiah.
Macneil
2
memilih untuk menutup sebagai tidak konstruktif - ini pada dasarnya adalah jajak pendapat. Kecuali jika seseorang memiliki studi empiris untuk dikutip, jawabannya semua akan menjadi dugaan atau favorit (atau tidak favorit) dan suara akan mencerminkan sentimen pribadi. Hasil akhirnya akan menjadi daftar pola desain tanpa kedalaman. Makanya, tidak konstruktif.
Steven A. Lowe
@ Seven: Saya cukup yakin Jay benar dengan The Big Ball of Mud. :-)
Setuju, ketika Anda memulai proyek baru semuanya terstruktur dan didokumentasikan dengan baik, tetapi ketika tenggat waktu semakin dekat, semuanya berakhir seperti bola lumpur besar
Arturo Molina
3
@ Arturo - Itu salah satu alasan yang memungkinkan. Lainnya: 1) Proyek kecil dimulai oleh programmer yang tidak berpengalaman yang secara tak terduga berhasil, dan kemudian tumbuh melampaui tujuan aslinya. 2) Kecenderungan programmer yang tidak berpengalaman ditugaskan untuk pemeliharaan, yang kemudian tidak memiliki panduan atau pemahaman tentang arsitektur asli, sehingga mereka hanya meretas barang-barang, dan semakin buruk seiring bertambahnya usia sistem. 3) Tim menggunakan teknologi yang salah, atau teknologi baru yang mereka tidak kenal dan menggunakannya dengan buruk pada proyek baru, dan itu kawah sebelum batas waktu :)
Jay
1
LOL - jika saya bisa menambahkan lebih banyak poin kepada Anda, saya akan. Pengamatan yang sangat baik (dan sedih).
luis.espinal
25
MVC dan variasinya jelas merupakan salah satu pola desain teratas.
Saya akan mengatakan bahwa pertanyaan OP itu agak konyol (saya masih percaya itu). Namun, jawaban Anda cukup benar IMO. Jika ada satu pola (dan variasinya) yang cukup banyak digunakan secara konsisten, inilah yang ini. +1 untuk jawaban Anda yang baik.
luis.espinal
21
Jika Anda berbicara tentang Gang-of-Four pola desain saya harus mengatakan Singleton . Ini adalah keadaan yang benar-benar menyedihkan - hampir seolah-olah programmer mendengar tentang keajaiban pola desain dan kemudian berhenti setelah yang pertama.
Jika Anda berbicara tentang pola gaya arsitektur (dengan kata lain, pola desain yang menjangkau beberapa kelas atau lapisan) saya harus mengatakan MVC . Beberapa yang populer lainnya adalah pola repositori dan service-locator .
Lebih menyedihkan lagi ketika Anda menganggap banyak orang menganggap Singleton sebagai antipattern!
RichardOD
1
@RichardOD, sedih karena orang-orang menganggapnya satu ketika tidak, atau sedih bahwa orang-orang menggunakannya ketika itu anti-pola?
Matt Olenik
Yang saya maksudkan adalah sedih karena begitu populer - sepertinya menjadi favorit wawancara. Terakhir kali saya diwawancarai saya ditanya bagaimana saya akan kode Singleton, dan tanggapan saya adalah bahwa saya tidak akan saya akan menggunakan wadah IOC seperti Unity untuk menangani itu untuk saya.
RichardOD
@ RichardOD - bukan singleton yang dianggap sebagai anti-pola. Ini adalah penyalahgunaan penggunaannya yang merupakan anti-pola. Sangat sedikit kasus yang benar-benar membutuhkan / membutuhkan tunggal, dan dalam lingkungan dengan wadah yang mengontrol granularitas sumber daya, mereka bahkan tidak diperlukan. Ketika Anda melihat singleton dalam basis kode Java modern, misalnya, itu biasanya sebuah bendera merah untuk penggunaan anti-pola (bukan pada pola singleton itu sendiri.)
luis.espinal
@ Jaco - Saya akan mengambil pandangan berbeda dari Anda. Saya pikir komposit, strategi dan templat (dan reinkarnasi berganda) telah menjadi jauh, jauh lebih lazim daripada singleton, khususnya karena kami telah berfokus pada komposisi struktural daripada warisan selama dekade terakhir ini.
luis.espinal
16
Pengamat
Jika Anda pernah menggunakan suatu acara. Anda telah menggunakan Pengamat.
Pikirkan antarmuka REST seperti Twitter atau API SO. Ini menyembunyikan banyak hal back end yang, setidaknya dalam kasus twitter, bisa sangat rumit.
Apakah saya peduli tweet db tables @ apklusk disimpan? Dan itu memiliki cache cepat? Dan bahwa @shemnon memiliki jumlah pembaca yang rendah, kicauan selalu di luar memori? Itulah keajaiban Fasad.
Setuju, strategi selain templat dan komposit (dan banyak variasi serta kombinasinya.)
luis.espinal
5
Mengapa belum ada yang menyebutkan iterator ? Terutama dengan semua peta yang membentuk struktur data yang kompleks ... ini yang paling saya gunakan. Atau apakah kita berbicara tentang pola yang kita terapkan kembali?
Saya terkejut tidak ada yang menyebutkan pola Pabrik, dalam pengalaman saya itu adalah salah satu pola yang paling banyak digunakan (dan juga paling banyak disalahgunakan) di luar sana. Jika tidak pertama, mungkin singleton harus menjadi yang pertama, saya akan berpikir ini akan menjadi yang kedua.
Bersamaan dengan jawaban saya sebelumnya, saya akan menambahkan yang baru saya bertemu hari ini dari binatang buas saya dari proyek yang diwarisi:
Salin / Tempel
Saat debugging saya menemukan sepotong kode yang memanggil 2 fungsi dengan nama yang sama:
if(x)
Func1
else
Func2
Func1 dan Func2 memiliki parameter yang sama. Saya menarik mereka keluar dan berbeda, dan mereka 100% sama kecuali untuk panggilan Func1 Func3 dan Func2 panggilan Func4. Saya mengeluarkannya dan membedakannya. 100% sama, kecuali untuk 1 baris. Jadi seorang programmer sebelumnya memutuskan untuk menyalin dan menempelkan dua fungsi bersarang 50-garis, alih-alih menambahkan parameter flag, ke 2 fungsi pribadi yang digunakan tepat di 1 tempat. Itu membuat saya ingin menangis.
Berbicara tentang pola desain Gang-of-Four, saya tidak bisa memikirkan program yang tidak menggunakan pola Observer. Juga, seperti yang disebutkan Jaco, Singleton juga sangat digunakan, sayangnya itu telah menjadi palu (setiap programmer menggunakannya bahkan jika itu tidak sepenuhnya diperlukan).
Lucu, tapi aku tidak pernah perlu menggunakan Singleton. Jika saya membutuhkan tempat untuk menyimpan status global, saya meletakkannya di file konfigurasi dan menggunakan kelas normal untuk mengaksesnya.
Robert Harvey
Tentu saja, dalam kasus-kasus itu tidak diperlukan ... bagaimana ketika Anda benar-benar membutuhkan satu objek untuk melakukan pekerjaan, secara sinkron, dan aman. Singleton tidak hanya untuk mempertahankan keadaan beberapa variabel statis, ini adalah objek nyata dengan pekerjaan nyata yang harus dilakukan, dll.
Cristian
Satu-satunya waktu yang saya pernah perlukan untuk itu adalah koneksi basis data. Yang mengatakan, hampir setiap "Layanan" (baca: mirip dengan pabrik) kelas dalam proyek ini di tempat kerja adalah singleton, disimpan dalam $_SESSIONvariabel PHP .
Tarka
2
Penerjemah
Jarang diimplementasikan, sering digunakan. XPATH, XSLT, Regex, pemilih jQuery, dll.
Saya terkejut belum ada yang mengatakan "Builder". Atau "Adaptor". Mereka mungkin tidak eksotis seperti beberapa yang lain yang disebutkan, tetapi saya menggunakannya sepanjang waktu. Pabrik dan Pabrik Abstrak sangat umum juga (tetapi sudah diambil).
Pada tingkat desain perangkat lunak, saya berpendapat bahwa Komposit, Strategi dan Templat (dan pada tingkat lebih rendah, Factory) adalah penggunaan yang paling luas. Selama sekitar sepuluh tahun terakhir, kami telah melihat preferensi untuk komposisi daripada warisan ketika membangun sistem kami menggunakan desain OO. Akibatnya, kombinasi pola yang baru saja disebutkan memainkan peran yang jauh lebih penting daripada semua IMO lainnya.
Secara arsitektur, saya berpendapat untuk MVC pada perusahaan, dan pola berdasarkan mesin negara pada sisi yang melekat hal.
Jawaban:
Saya cukup yakin yang paling umum adalah 'The Big Ball of Mud'. Sayangnya untuk kita semua.
http://en.wikipedia.org/wiki/Big_ball_of_mud
sumber
MVC dan variasinya jelas merupakan salah satu pola desain teratas.
sumber
Jika Anda berbicara tentang Gang-of-Four pola desain saya harus mengatakan Singleton . Ini adalah keadaan yang benar-benar menyedihkan - hampir seolah-olah programmer mendengar tentang keajaiban pola desain dan kemudian berhenti setelah yang pertama.
Jika Anda berbicara tentang pola gaya arsitektur (dengan kata lain, pola desain yang menjangkau beberapa kelas atau lapisan) saya harus mengatakan MVC . Beberapa yang populer lainnya adalah pola repositori dan service-locator .
sumber
Pengamat
Jika Anda pernah menggunakan suatu acara. Anda telah menggunakan Pengamat.
sumber
Penghias
Tambahkan fungsionalitas ke objek saat runtime melalui komposisi. Favorit pribadi saya.
Sunting: Juga Pabrik mungkin salah satu yang paling umum.
sumber
Fasad
Pikirkan antarmuka REST seperti Twitter atau API SO. Ini menyembunyikan banyak hal back end yang, setidaknya dalam kasus twitter, bisa sangat rumit.
Apakah saya peduli tweet db tables @ apklusk disimpan? Dan itu memiliki cache cepat? Dan bahwa @shemnon memiliki jumlah pembaca yang rendah, kicauan selalu di luar memori? Itulah keajaiban Fasad.
sumber
Pola Strategi
Jika Anda pernah menggunakan injeksi ketergantungan, Anda telah menggunakan pola strategi.
sumber
Mengapa belum ada yang menyebutkan iterator ? Terutama dengan semua peta yang membentuk struktur data yang kompleks ... ini yang paling saya gunakan. Atau apakah kita berbicara tentang pola yang kita terapkan kembali?
sumber
Saya terkejut tidak ada yang menyebutkan pola Pabrik, dalam pengalaman saya itu adalah salah satu pola yang paling banyak digunakan (dan juga paling banyak disalahgunakan) di luar sana. Jika tidak pertama, mungkin singleton harus menjadi yang pertama, saya akan berpikir ini akan menjadi yang kedua.
sumber
Bersamaan dengan jawaban saya sebelumnya, saya akan menambahkan yang baru saya bertemu hari ini dari binatang buas saya dari proyek yang diwarisi:
Salin / Tempel
Saat debugging saya menemukan sepotong kode yang memanggil 2 fungsi dengan nama yang sama:
Func1 dan Func2 memiliki parameter yang sama. Saya menarik mereka keluar dan berbeda, dan mereka 100% sama kecuali untuk panggilan Func1 Func3 dan Func2 panggilan Func4. Saya mengeluarkannya dan membedakannya. 100% sama, kecuali untuk 1 baris. Jadi seorang programmer sebelumnya memutuskan untuk menyalin dan menempelkan dua fungsi bersarang 50-garis, alih-alih menambahkan parameter flag, ke 2 fungsi pribadi yang digunakan tepat di 1 tempat. Itu membuat saya ingin menangis.
sumber
Berbicara tentang pola desain Gang-of-Four, saya tidak bisa memikirkan program yang tidak menggunakan pola Observer. Juga, seperti yang disebutkan Jaco, Singleton juga sangat digunakan, sayangnya itu telah menjadi palu (setiap programmer menggunakannya bahkan jika itu tidak sepenuhnya diperlukan).
sumber
$_SESSION
variabel PHP .Penerjemah
Jarang diimplementasikan, sering digunakan. XPATH, XSLT, Regex, pemilih jQuery, dll.
sumber
Saya terkejut belum ada yang mengatakan "Builder". Atau "Adaptor". Mereka mungkin tidak eksotis seperti beberapa yang lain yang disebutkan, tetapi saya menggunakannya sepanjang waktu. Pabrik dan Pabrik Abstrak sangat umum juga (tetapi sudah diambil).
sumber
Spesifikasi
Saya tidak berpikir itu terdaftar di GoF, tetapi saya menggunakan variasi itu setiap saat.
sumber
Pola desain yang paling sering digunakan adalah, jelas, Spaghetti .
sumber
Pada tingkat desain perangkat lunak, saya berpendapat bahwa Komposit, Strategi dan Templat (dan pada tingkat lebih rendah, Factory) adalah penggunaan yang paling luas. Selama sekitar sepuluh tahun terakhir, kami telah melihat preferensi untuk komposisi daripada warisan ketika membangun sistem kami menggunakan desain OO. Akibatnya, kombinasi pola yang baru saja disebutkan memainkan peran yang jauh lebih penting daripada semua IMO lainnya.
Secara arsitektur, saya berpendapat untuk MVC pada perusahaan, dan pola berdasarkan mesin negara pada sisi yang melekat hal.
sumber