Bagaimana cara mempelajari pola desain? [Tutup]

352

Saya telah membaca sekitar 4-5 buku tentang pola desain, tetapi saya masih merasa tidak mendekati level menengah dalam pola desain?

Bagaimana saya harus mempelajari pola desain?

Apakah ada buku bagus untuk pola desain?

Saya tahu ini akan datang hanya dengan pengalaman tetapi harus ada cara untuk menguasainya?

anand
sumber
6
Cara terbaik untuk mempelajari pola desain adalah dengan melakukan proyek. Ketika Anda melihat pola dalam proyek Anda akan tahu kapan harus menggunakan mereka di sini adalah artikel yang mengajarkan langkah pola desain demi langkah dengan proyek codeproject.com/Articles/1009532/...
Shivprasad Koirala
1
Lihatlah Antipatterns juga deviq.com/antipatterns
Pengembang
Anda dapat mempelajarinya dari sini, play.google.com/store/apps/…
Keyur Thumar
Mungkin terlambat tetapi masih dapat membantu seseorang .. coba geeksforgeeks.org/software-design-patterns untuk memahami dasar-dasar dan skenario yang menjelaskan di mana mereka dapat digunakan. Membantu saya memahami dasar dan tujuan setiap pola
zeetit
Lihat juga, Pluralsight
ssmith

Jawaban:

206

Cara terbaik adalah mulai coding dengan mereka. Pola desain adalah konsep hebat yang sulit diterapkan hanya dengan membaca tentang mereka. Ambil beberapa contoh implementasi yang Anda temukan online dan bangun di sekitarnya.

Sumber yang bagus adalah halaman Data & Object Factory . Mereka membahas polanya, dan memberi Anda contoh dunia nyata konseptual dan. Bahan referensi mereka juga bagus.

Joseph Ferris
sumber
11
Persis! Saya selalu senang bahwa perangkat lunak berada di bawah "Ilmu Komputer". Saya dapat melihat argumen untuk perangkat keras, tetapi perangkat lunak menghasilkan ilmu yang sangat tidak eksak!
Joseph Ferris
Sayangnya sumber daya ini tidak lagi tersedia :(.
5
@NielsW Terserah, mungkin itu hanya sementara.
uthomas
211

Saya membaca tiga buku dan masih tidak memahami pola dengan sangat baik sampai saya membaca Head First Design Patterns oleh OReilly. Buku ini membuka mata saya dan benar-benar menjelaskan dengan baik.

teks alternatif

Darren C
sumber
14
Awalnya agak aneh membaca buku "serius" yang kelihatannya seperti itu, tetapi ketika saya terus membaca, saya perhatikan bahwa saya sebenarnya memahami konsep untuk suatu perubahan. Pasti layak dibaca.
Tim Whitcomb
18
Saya pasti berpikir ini adalah buku terbaik untuk belajar tentang pola desain. Buku GoF harus digunakan sebagai referensi, setelah Anda memahaminya dengan lebih baik.
Bill the Lizard
Anda menyebutkan Anda membaca 3 buku..apakah Anda membaca yang ini juga? amazon.com/... jika demikian, bagaimana menurut Anda?
sivabudh
11
Saya bertemu Erich Gamma (salah satu GoF) di sebuah konferensi di Nantes, Prancis pada 2006 dan dia mengatakan buku ini melebihi penjualan buku
GoF
1
Setelah membaca buku ini, OO masuk akal. @SimpleFellow Buku GoF membosankan. Tanpa pengetahuan sebelumnya tentang pola desain membuat Anda tidur dalam waktu singkat. Hal ini namun baik ( yang ) buku referensi dan harus menjadi bagian dari setiap perpustakaan profesional bersama dengan DDD dan P dari EAA.
mbx
93

Dua sen saya untuk pertanyaan lama dan itu

Beberapa orang sudah menyebutkan, berlatih, dan refactoring. Saya percaya urutan yang tepat untuk belajar tentang pola adalah ini:

  1. Pelajari Test Driven Development (TDD)
  2. Pelajari refactoring
  3. Pelajari pola

Kebanyakan orang mengabaikan 1, banyak yang percaya mereka bisa melakukan 2, dan hampir semua orang langsung ke 3.

Bagi saya kunci untuk meningkatkan keterampilan perangkat lunak saya adalah belajar TDD. Mungkin butuh waktu lama untuk coding yang menyakitkan dan lambat, tetapi menulis tes Anda terlebih dahulu tentu membuat Anda banyak berpikir tentang kode Anda. Jika suatu kelas membutuhkan terlalu banyak ketel uap atau mudah patah, Anda mulai memperhatikan bau tidak sedap dengan cepat

Manfaat utama dari TDD adalah Anda kehilangan rasa takut refactoring kode Anda dan memaksa Anda untuk menulis kelas yang sangat independen dan kohesif. Tanpa serangkaian tes yang baik, terlalu menyakitkan untuk menyentuh sesuatu yang tidak rusak. Dengan jaring pengaman Anda akan benar-benar berpetualang menjadi perubahan drastis pada kode Anda. Itulah saat ketika Anda benar-benar dapat mulai belajar dari latihan.

Sekarang sampai pada titik di mana Anda harus membaca buku tentang pola, dan menurut pendapat saya, itu adalah buang-buang waktu untuk berusaha terlalu keras. Saya hanya mengerti pola dengan sangat baik setelah memperhatikan saya melakukan sesuatu yang serupa, atau saya bisa menerapkannya pada kode yang ada. Tanpa tes keamanan, atau kebiasaan refactoring, saya akan menunggu sampai proyek baru. Masalah menggunakan pola dalam proyek baru adalah bahwa Anda tidak melihat dampaknya atau mengubah kode kerja. Saya hanya mengerti pola perangkat lunak begitu saya refactored kode saya ke salah satu dari mereka, tidak pernah ketika saya memperkenalkan satu yang baru dalam kode saya.

SystematicFrank
sumber
dapat u merekomendasikan beberapa buku untuk TDD dan refactoring majorly di C ++
anand
2
Anda akan memiliki banyak masalah dalam menemukan konten berkualitas jika Anda mempersempit ke C ++. Selain itu, C ++ bukan bahasa tempat Anda ingin belajar pengujian karena secara teknis, bahasa ini tidak memiliki refleksi, itu saja membuat sangat sulit membangun alat pengujian yang baik. Itu masih bisa dilakukan, tetapi komunitas, forum, diskusi dan jumlah orang TDD adalah minoritas dalam C ++ karena itu. Saya telah banyak bekerja dengannya, tetapi meskipun memiliki kekuatan, itu bukan bahasa yang ramah untuk ujian.
SystematicFrank
62

Derek Banas membuat tutorial youtube untuk pola desing yang sangat saya sukai:

http://www.youtube.com/playlist?list=PLF206E906175C7E07

Mereka mungkin sedikit kekurangan waktu, tetapi waktu dan presentasinya membuat mereka sangat senang untuk belajar.

Pedro Duarte
sumber
35

Berlatih, berlatih, berlatih.

Anda dapat membaca tentang memainkan cello selama bertahun-tahun, dan masih belum bisa membungkuk pada instrumen dan membuat apa pun yang terdengar seperti musik.

Pola desain paling baik diakui sebagai masalah tingkat tinggi; yang hanya relevan jika Anda memiliki pengalaman yang diperlukan untuk mengenalinya sebagai hal yang berguna. Adalah baik bahwa Anda menyadari bahwa mereka berguna, tetapi kecuali Anda telah melihat situasi di mana mereka akan berlaku, atau telah diterapkan, hampir tidak mungkin untuk memahami nilai sebenarnya.

Di mana mereka menjadi berguna adalah ketika Anda mengenali pola desain dalam kode orang lain, atau mengenali masalah dalam fase desain yang cocok dengan suatu pola; dan kemudian memeriksa pola formal, dan memeriksa masalah, dan menentukan apa delta di antara mereka, dan apa yang dikatakan tentang pola dan masalah.

Ini benar-benar sama dengan pengkodean; K&R mungkin menjadi "kitab suci" untuk C, tetapi membacanya dari depan ke belakang beberapa kali tidak memberikan satu pengalaman praktis; tidak ada pengganti untuk pengalaman.

Paul Sonier
sumber
5
+1. Saya pikir banyak pemula melompat terlalu cepat ke pola desain dan mulai merancang sistem yang dibangun di sekitar pabrik abstrak, lajang, pengamat, pengunjung, dll. Langsung dari buku. Hasilnya sering bertangan-tangan, tidak menggunakan bahasa dengan sebaik-baiknya, dan bahkan tidak direkayasa dengan baik dari sudut pandang kopling / kohesi dasar (yang terakhir ini terutama menderita ketika pola desain dilaksanakan dengan buruk). Dibutuhkan pengalaman untuk memutuskan di mana pola desain yang tepat, dan bahkan lebih untuk memutuskan bagaimana menerapkannya dalam bahasa tertentu secara paling tepat.
stinky472
25

Praktik praktik praktik. Saya pikir 4 sampai 5 buku bahkan latihan membaca yang berlebihan tanpa latihan yang baik. Saya percaya, cara terbaik untuk melakukan ini adalah mulai refactoring proyek Anda saat ini menggunakan pola. Atau jika Anda tidak memiliki proyek yang sedang Anda kerjakan maka lakukan saja dengan cara Anda sendiri dan kemudian coba refactoring ke pola .

Anda tidak dapat menghargai mereka sepenuhnya jika Anda belum menderita melalui masalah yang mereka pecahkan. Dan harap diingat bahwa itu bukan peluru perak - Anda tidak perlu menghafalnya dan mendorongnya keras untuk menerapkannya dengan cepat. Dua sen saya ..

utku_karatas
sumber
15

Tanyakan pada diri Anda pertanyaan-pertanyaan ini:

Apa yang mereka lakukan?

Apa yang mereka decouple / berpasangan?

Kapan Anda harus menggunakannya?

Kapan sebaiknya Anda tidak menggunakannya?

Fitur bahasa apa yang hilang yang membuat mereka pergi?

Utang teknis apa yang Anda keluarkan dengan menggunakannya?

Apakah ada cara yang lebih sederhana untuk menyelesaikan pekerjaan?

gtrak
sumber
14
dan akhirnya tanyakan pada diri Anda dari mana mendapatkan jawaban dari semua pertanyaan yang disebutkan di atas
Jatin Dhoot
@ JatinDhoot dengan berpikir ..
gtrak
8

Saya telah menemukan bahwa agak sulit untuk memahami atau memahami manfaat dari beberapa pola sampai seseorang memahami masalah yang mereka pecahkan dan cara-cara lain (lebih buruk) masalah telah diimplementasikan.

Selain buku-buku GOF dan POSA saya belum benar-benar membaca sehingga saya tidak bisa memberikan rekomendasi lain. Benar-benar Anda hanya perlu memiliki pemahaman tentang masalah domain dan saya pikir banyak pengembang yang kurang berpengalaman mungkin tidak dapat menghargai manfaat dari pola. Ini tidak sedikit melawan mereka. Jauh lebih mudah untuk merangkul, memahami, dan menghargai solusi yang baik ketika seseorang harus berjuang dengan alternatif yang buruk terlebih dahulu.

Semoga berhasil

Tim
sumber
+1 untuk memahami masalah yang ingin mereka selesaikan. Tantangannya adalah untuk melihat masalah secara langsung (pada proyek nyata yang memiliki kepentingan pribadi). Terlalu banyak contoh masalah dalam buku (terlalu banyak) disederhanakan. Salah satu alasan saya menyukai buku Head First Design Patterns adalah karena mereka menunjukkan beberapa masalah dengan solusi naif, dan seberapa tidak dapat dipertahankannya solusi tersebut. Lalu mereka mempresentasikan polanya dan seberapa bersih ... Lihat Dekorator di buku itu, misalnya.
Fuhrmanator
8

Banyak contoh bagus telah diberikan. Saya ingin menambahkan satu:

Salah menerapkan mereka Anda tidak perlu melakukan itu dengan sengaja, itu akan terjadi ketika Anda mencoba menerapkannya dalam Desain-Pola-fit awal Anda. Selama waktu itu, setiap masalah yang akan Anda lihat tampaknya cocok dengan satu pola desain. Seringkali masalah semua tampaknya sesuai dengan pola desain yang sama karena beberapa alasan (Singelton adalah kandidat utama untuk itu).

Dan Anda akan menerapkan polanya dan itu akan baik. Dan beberapa bulan kemudian Anda perlu mengubah sesuatu dalam kode dan melihat bahwa menggunakan pola khusus itu tidak sepintar itu, karena Anda mengkodekan diri sendiri ke sudut dan Anda perlu refactor lagi.

Memang, itu bukan jawaban do-that-and-you-learn-it-in-21-days, tapi menurut pengalaman saya, itu yang paling mungkin memberi Anda wawasan yang baik tentang masalah ini.

Joachim Sauer
sumber
7

Sudahkah Anda membaca "Pola Desain Dijelaskan", oleh Allan Shalloway.

Buku ini sangat berbeda dari buku-buku pola desain lain karena tidak begitu banyak katalog pola, tetapi terutama menyajikan cara penguraian ruang masalah yang memetakan dengan mudah ke pola.

Masalah dapat diuraikan menjadi dua bagian: hal-hal yang umum dan hal-hal yang bervariasi. Setelah ini selesai, kami memetakan hal-hal umum ke antarmuka, dan hal-hal yang berbeda untuk suatu implementasi. Intinya, banyak pola termasuk dalam "pola" ini.

Misalnya dalam pola Strategi, hal-hal umum diekspresikan sebagai konteks strategi, dan bagian variabel diekspresikan sebagai strategi konkret.

Saya menemukan buku ini sangat memprovokasi berbeda dengan buku-buku pola lain yang, bagi saya, memiliki tingkat kegembiraan yang sama dengan membaca buku telepon.

Phillip Ngan
sumber
6

Sudahkah Anda mencoba buku Gang of Four?

Pola Desain: Elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali

Rohit
sumber
7
Saya tidak akan merekomendasikan buku itu sebagai buku yang "membuka mata" :)
Geo
73
Saya akan merekomendasikan ini sebagai buku yang sangat menarik. Beberapa halaman buku tebal ini sebelum tidur dan insomnia Anda akan menjadi masa lalu.
Donal
2
datang ke sini setelah ketika saya merasa tertidur di tengah hari saat membaca buku ini. mencari 'memahami pola desain'. menemukan pos. menemukan komentar di atas. membuatku bahagia. setuju dengan yang lain, ini buku yang menutup mata
aimme
5

Untuk buku, saya akan merekomendasikan Pola Desain Dijelaskan , dan pola Desain Kepala Pertama . Untuk benar-benar mempelajari pola-pola ini, Anda harus melihat kode yang ada. Cari pola apa yang sudah Anda gunakan. Lihatlah aroma kode dan pola apa yang mungkin menyelesaikannya.

David Nehme
sumber
4

Saya telah memimpin beberapa kelompok diskusi pola desain ( situs kami ) dan telah membaca 5 atau 6 buku pola. Saya sarankan memulai dengan buku Pola Desain Kepala Pertama dan menghadiri atau memulai kelompok diskusi. Buku Head First mungkin kelihatan sedikit Hasboro pada awalnya, tetapi kebanyakan orang menyukainya setelah membaca satu atau dua bab.

Gunakan sumber daya yang luar biasa - Panduan Belajar Joshua Kereivisky untuk Merancang Pola untuk pemesanan pola dan untuk membantu kelompok diskusi Anda. Dari pengalaman, satu perubahan yang saya sarankan untuk pemesanan adalah menempatkan Strategi terlebih dahulu. Sebagian besar pengembang saat ini telah mengalami beberapa inkarnasi baik atau buruk dari Pabrik, sehingga memulai dengan Pabrik dapat menyebabkan banyak percakapan dan kebingungan tentang pola tersebut. pertemuan pertama.

JB Brown
sumber
3

Saya merekomendasikan HeadFirst DesignPattern. Membaca buku tidak cukup, setelah mengasimilasi konsep yang Anda butuhkan untuk menemukan jawaban untuk banyak pertanyaan muncul di pikiran Anda dan mencoba untuk menemukan aplikasi kehidupan nyata di mana dalam pola ini dapat digunakan. Saya melakukan hal yang sama dan mulai mengajukan pertanyaan bahkan pertanyaan itu terlihat konyol.

Rajkumar Vasan
sumber
2

Saran saya akan menjadi kombinasi dari mengimplementasikan beberapa dari mereka dan menganalisis beberapa implementasi dari mereka. Sebagai contoh, di dalam. Net, ada penggunaan pola adaptor jika Anda melihat Adaptor Data, serta beberapa lainnya jika ada yang sedikit menggali kerangka kerja.

JB King
sumber
2

Saya tidak tahu tentang buku terbaik, tetapi para puritan mungkin mengatakan Pola Desain: Elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali

Sejauh favorit pribadi saya, saya suka Head First Design Patterns yang diterbitkan oleh O'Reilly. Itu ditulis dalam suara percakapan yang menarik bagiku. Ketika saya membacanya, saya meninjau kode sumber saya pada saat yang sama untuk melihat apakah itu berlaku untuk apa yang saya baca. Jika ya, saya refactored. Inilah bagaimana saya belajar Rantai Tanggung Jawab.

Praktek - Praktek - Praktek.

Jason Slocomb
sumber
2

Pola desain hanyalah alat - semacam fungsi perpustakaan. Jika Anda tahu bahwa mereka ada di sana dan perkiraan fungsinya, Anda bisa menggali buku itu saat dibutuhkan.

Tidak ada keajaiban tentang pola desain, dan programmer yang baik menemukan 90% dari mereka untuk diri mereka sendiri sebelum buku apa pun keluar. Untuk sebagian besar, saya menganggap buku-buku itu paling berguna dalam menentukan nama untuk berbagai pola sehingga kita dapat membahasnya dengan lebih mudah.

Bill K.
sumber
2

Cara saya mempelajari pola desain adalah dengan menulis banyak perangkat lunak yang sangat mengerikan. Ketika saya berusia sekitar 12 tahun, saya tidak tahu apa yang baik atau buruk. Saya baru saja menulis tumpukan kode spageti. Selama 10 tahun ke depan, saya belajar dari kesalahan saya. Saya menemukan apa yang berhasil dan apa yang tidak. Saya secara mandiri menemukan sebagian besar pola desain umum, jadi ketika saya pertama kali mendengar apa pola desain itu, saya sangat bersemangat untuk mempelajarinya, kemudian sangat kecewa karena itu hanya kumpulan nama untuk hal-hal yang sudah saya ketahui secara intuitif. (Lelucon tentang mengajar diri sendiri C ++ dalam 10 tahun sebenarnya bukan lelucon)

Moral cerita: tulis banyak kode. Seperti yang dikatakan orang lain, latihan, latihan, latihan. Saya pikir sampai Anda mengerti mengapa desain Anda saat ini buruk dan mencari cara yang lebih baik, Anda tidak akan memiliki ide yang baik tentang di mana menerapkan berbagai pola desain. Buku-buku pola desain harus memberi Anda solusi yang disempurnakan dan terminologi umum untuk membahasnya dengan pengembang lain, bukan solusi tempel untuk masalah yang tidak Anda mengerti.

rmeador
sumber
2

Gagasan yang membaca pola desain, mempraktikkan pengkodean mereka tidak benar-benar akan membantu IMO. Saat Anda membaca buku-buku ini 1. Cari masalah dasar yang dipecahkan oleh pola desain tertentu, dimulai dengan Pola Kreasi adalah pilihan terbaik Anda. 2. Saya yakin Anda telah menulis kode di masa lalu, menganalisis jika Anda menghadapi masalah yang sama dengan pola desain yang bertujuan memberikan solusi. 3. Cobalah mendesain ulang / kode faktor ulang atau mungkin memulai dengan yang baru.

Tentang sumber daya, Anda dapat memeriksa ini

  1. www.dofactory.com
  2. Pola Desain: Elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali (Addison-Wesley Professional Computing Series) oleh Erich Gamma, Richard Helm, Ralph Johnson, dan John M. Vlissides
  3. Pola Arsitektur Aplikasi Perusahaan oleh Martin Fowler

1 adalah awal yang cepat, 2 akan menjadi studi mendalam. 3 akan menjelaskan atau membuat Anda berpikir apa yang Anda pelajari dalam 2 cocok dalam perangkat lunak perusahaan.

2 sen saya ...

Perpetualcoder
sumber
1

Saya akan berpikir juga sulit untuk mempelajari pola desain. Anda harus tahu lebih banyak tentang OOP dan beberapa pengalaman dengan pengembangan aplikasi menengah hingga besar. Bagi saya, saya belajar sebagai kelompok pengembang untuk berdiskusi. Kami mengikuti Panduan Belajar Untuk Merancang Pola yang telah mereka selesaikan dalam studi pola. Ada C # dan pengembang JavaScript bergabung bersama. Ini hal yang mewah bagi saya adalah kode C # developer menulis dalam JavaScript dan pengembang JavaScript melakukan hal yang sama untuk kode C #. Setelah saya meninggalkan rapat, saya juga meneliti dan membaca beberapa buku di rumah untuk ditinjau. Cara yang lebih baik untuk lebih memahami dan mengingat dalam pikiran saya adalah melakukan blogging dengan contoh-contoh dalam C # dan JavaScript di sini http://tech.wowkhmer.com/category/Design-Patterns.aspx .

Saya akan menyarankan terlebih dahulu sebelum pergi ke masing-masing pola desain, harap dipahami nama pola. Selain itu jika seseorang tahu konsepnya, tolong jelaskan dan berikan satu contoh tidak hanya pemrograman tetapi di dunia baca.

sebagai contoh:

Metode pabrik:

Baca dunia: Saya hanya memberikan uang $ 5, $ 10 atau $ 20 dan itu akan menghasilkan pizza kembali tanpa mengetahui apa-apa tentang bagaimana menghasilkan, saya hanya mendapatkan pizza kecil, sedang atau besar tergantung pada input uang sehingga saya bisa makan atau melakukan apa pun.

Pemrograman: Klien hanya memberikan nilai parameter $ 5, $ 10 atau $ 20 ke metode pabrik dan itu akan mengembalikan objek Pizza kembali. Jadi klien dapat menggunakan objek itu tanpa mengetahui bagaimana prosesnya.

Saya tidak yakin ini bisa membantu Anda. Itu tergantung pada tingkat pengetahuan orang yang bergabung dalam rapat.

Vorleak Chy
sumber
Tautan kedua dalam jawaban sudah mati.
Pang
1

Saya pikir Anda perlu memeriksa beberapa masalah yang Anda temui sebagai pengembang di mana Anda mencabut rambut Anda setelah Anda harus merevisi kode Anda untuk yang ke 10 kalinya karena perubahan desain lagi. Anda mungkin memiliki daftar proyek di mana Anda merasa ada banyak pengerjaan ulang dan rasa sakit.

Dari daftar itu Anda bisa mendapatkan skenario yang ingin diselesaikan Pola Desain. Apakah ada waktu di mana Anda perlu melakukan serangkaian tindakan yang sama pada set data yang berbeda? Apakah Anda harus dapat memiliki kemampuan masa depan untuk suatu aplikasi tetapi ingin menghindari pengerjaan ulang semua logika Anda untuk kelas yang ada? Mulailah dengan skenario itu dan kembali ke katalog pola dan masalah masing-masing yang seharusnya mereka selesaikan. Anda mungkin melihat beberapa kecocokan antara GoF dan perpustakaan proyek Anda.

David Robbins
sumber
1

Untuk pemula, pola Desain Kepala Pertama akan dilakukan, setelah kita terbiasa dengan semua pola, kemudian mencoba memvisualisasikan objek waktu nyata ke dalam pola-pola itu.

Buku akan membantu Anda memahami konsep-konsep dasar, kecuali sampai Anda telah menerapkannya di dunia nyata Anda TIDAK DAPAT MENJADI MASTER POLA DESAIN

gmhk
sumber