Pola Desain: Haruskah saya mempelajarinya? [Tutup]

13

Jadi agak aneh mengajukan dua pertanyaan secara berurutan, tetapi mereka tidak terlalu terkait dan saya tidak ingin menggabungkannya, tapi saya bukan pertanyaan spam, saya janji!

Bagaimanapun, saya lulusan perguruan tinggi baru-baru ini, dan pendidikan saya hanya menyentuh pada pola desain ... kami menerapkan beberapa yang sederhana, menyentuh pada kenyataan bahwa ada yang lebih rumit, dan diperintahkan untuk beralih ke buku GoF jika kami ingin belajar lebih banyak. Pertanyaan saya adalah, apakah ada baiknya mempelajari pola dalam buku GoF? Bagi saya, selalu tampak kontra-intuitif untuk mencoba dan membuat masalah sesuai dengan pola klasik, tetapi jelas buku itu, dan polanya, terkenal karena suatu alasan. Apakah mereka menunjukkan cukup sehingga saya harus belajar mereka?

Terima kasih lagi!

prelic
sumber
Sudahkah Anda membaca pertanyaan lain yang ditandai sebagai [pola-desain]?
Peter Taylor
Salah satu yang disarankan sebelum saya posting tampaknya sebagian besar meminta sumber daya yang baik, atau berbicara tentang cara terbaik untuk mempelajarinya. Saya bisa mempelajarinya sendiri, saya hanya ingin tahu bagaimana pola klasik diterapkan. Maaf jika ini adalah repost, silakan tutup.
prelic
1
Saya tidak berpikir itu adalah repost yang tepat, tapi saya ingin tahu apa yang Anda butuhkan yang tidak disediakan oleh jawaban untuk misalnya programmer.stackexchange.com/questions/84098/… programmers.stackexchange.com/questions/78825/…
Peter Taylor
Setidaknya seseorang merujuknya di perguruan tinggi. Saya tidak mendengar tentang hal itu sampai saya mulai mewawancarai untuk pekerjaan pasca-kuliah kedua saya (di mana ternyata saya tidak cocok karena saya belum pernah mendengar tentang singleton vs mengetahui mekanisme pola).
Mayo
Mungkin menarik: mahemoff.com/paper/software/learningGoFPatterns
Tom Anderson

Jawaban:

11

Seperti biasa

Tergantung

Tergantung pada seberapa banyak OOP yang telah Anda lakukan, apakah Anda akan mengenali atau bahkan dapat memanfaatkan pola desain

Itu tergantung pada seberapa disiplinnya Anda, apakah Anda akan menerapkan pola-pola yang pernah dipelajari dengan benar, dan tidak menjadi gila seperti pepatah pria dengan palu

Di sisi lain ... lima jari!

Jika Anda telah melakukan beberapa tahun pekerjaan OOP yang serius atau Anda memiliki mentor yang dapat diandalkan untuk membuat Anda tetap di jalur atau Anda hanya suka membaca OOP-kutu buku, maka dengan segala cara pergi membeli buku dan mempelajarinya.

Ini membantu untuk mengetahui pola sehingga Anda akan mengenali kapan harus menggunakannya, dan kapan tidak menggunakannya.

Steven A. Lowe
sumber
Saya pikir banyak. Hanya karena penasaran, jika Anda harus memilih beberapa yang akan Anda anggap paling penting secara konseptual, atau paling populer, akan menjadi apa mereka?
prelic
1
@prelic: singleton - karena kontroversi di sekitarnya - dan pengunjung - karena sangat berguna
Steven A. Lowe
2
@prelic: Saya akan mulai dengan strategi dan pengamat - karena mereka sangat berguna
Falcon
1
+1 Komentar terbaik tentang subjek ini! Pola yang saya gunakan secara teratur: Perintah, Adaptor, dan Metode Pabrik.
Oliver Weiler
Yang saya gunakan seperti bernafas adalah Singleton, Metode Templat, Dekorator, dan Komposit. Dan Iterator, tetapi hampir selalu dalam kedok a java.util.Iterator, di mana hampir tidak tampak seperti pola. Strategi, Pengunjung, dan Fasad akan menjadi orang-orang yang secara sadar saya terapkan ketika saya melihat kebutuhan mereka.
Tom Anderson
21

Ya, Anda harus mempelajarinya.

Lebih masuk akal untuk mengunjungi mereka kembali setelah Anda mendapatkan pengalaman , sehingga Anda dapat membandingkannya dengan apa yang Anda ketahui. Untuk beberapa pola itu akan berubah bahwa ini adalah sesuatu yang Anda temukan sendiri, tetapi Anda akan dapat mempelajari sesuatu yang lebih umum tentang penggunaannya, pengorbanan, varian, dan sebagainya. Orang lain mungkin secara langsung mengatasi masalah yang Anda atasi dan menunjukkan kepada Anda solusi elegan yang tidak Anda ketahui.

Besar mayoritas pola ini sangat berguna dan umum . Yang lain mungkin tidak sepopuler ini, tetapi masih memiliki beberapa penggunaan sempit di mana mereka sangat cocok.

Ada satu lagi alasan mengapa itu layak dibaca: Ini akan mengajarkan Anda cara berpikir . Tentu, ini bukan peluru perak, tetapi masih merupakan inspirasi yang tak ternilai.

Terakhir tetapi tidak kalah pentingnya, tidak pernah, pernah, dalam keadaan apa pun mencoba dan membuat masalah sesuai dengan pola atau alat . Itu pemikiran yang sangat buruk dan berbahaya! Memahami bagaimana alat ini bekerja dan menggunakannya dengan bijak untuk mengatasi masalah, tidak pernah sebaliknya.

Semakin banyak alat yang Anda kenal dengan baik, semakin baik. Terkadang alat dapat menginspirasi pemikiran Anda (daripada menyelesaikan masalah secara langsung), di lain waktu Anda akan menggabungkan beberapa dari mereka untuk solusi yang bagus.

Buku GOF adalah sumber yang bagus untuk banyak alat berguna yang kami gunakan setiap hari .

Konrad Garus
sumber
Terima kasih atas sarannya! Saya berharap saya bisa memberikan banyak tanda centang
prelic
6

Manfaat paling penting dari mengetahui sedikit tentang Desain Patters, adalah Anda tahu apa arti istilah itu. Dengan kata lain Anda tahu kosakata umum .

Bagi saya, ini adalah pencapaian paling penting dari semua gejolak Pola Desain, bahwa kosa kata umum telah muncul di mana Anda dapat menggunakan nama-nama pola tertentu, dan orang lain segera tahu apa yang Anda bicarakan tanpa Anda harus menjelaskannya. . Hal-hal yang digambarkan oleh pola-pola tersebut diketahui oleh sebagian besar programmer, tetapi perlu waktu untuk menjelaskan apa yang Anda maksudkan kepada orang lain, sehingga membuat komunikasi lebih mudah untuk mengetahui nama-nama pola.

Contohnya adalah Pengunjung, Singleton, dan Dekorator.

Jadi dengan kata lain, saya sarankan Anda paling tidak akrab dengan nama dan apa yang mereka lakukan.


sumber
5

YA tetapi dengan hati-hati!

Bagian YA:

Terkadang, kami mengalami masalah dalam desain kami. Terkadang masalah tersebut sangat umum, sehingga pola desain memberi Anda solusi yang teruji untuk masalah tersebut. Manfaat utama dari mempelajari pola desain adalah Anda dapat membuat solusi desain jauh lebih cepat dan jika rekan kerja Anda mengetahui istilah desain pola , Anda dapat menjelaskan solusi lebih cepat juga.

Bagian dengan hati-hati:

Pola desain seharusnya tidak menjadi cawan suci solusi Anda. Solusi paling sederhana (KISS) lebih diinginkan dan berkali-kali pola desain akan membuat segalanya lebih kompleks. Jika Anda mempelajari pola desain, pelajari juga tentang pola-anti.Saya tahu beberapa orang tua yang menentang pola desain dan saya setuju sampai batas tertentu dengan mereka karena ketika Anda tidak memiliki terlalu banyak pengalaman pengkodean tetapi memuat teori pola desain, Anda mungkin akhirnya membuat menipis jauh lebih sulit untuk Anda dan Anda tim.

Terakhir, Jangan berpikir bahwa Anda harus menyesuaikan / mengganti solusi Anda hanya untuk mematuhi pola desain. Sebaliknya, Anda bisa membengkokkan pola desain sehingga bisa masuk ke dalam solusi Anda. Tidak apa-apa jika Anda tidak menggunakan setiap bahan dari resep pola desain selama Anda memiliki solusi yang lebih baik untuk masalah khusus Anda. Pikirkan pola desain sebagai saran dan bukan sebagai aturan untuk solusi Anda.

Armando
sumber
1

Saya telah menemukan metode Net Objectives 'berpikir tentang patters sebagai yang paling bermanfaat. Orang-orang yang membaca buku GoF terlalu sering mulai berasumsi bahwa struktur yang mereka perlihatkan, dalam notasi desain dan kode, adalah polanya dan bahwa selalu seperti ini tampilannya. Ada cara yang berbeda dan bisa dibilang lebih baik untuk melihatnya.

Pola adalah kumpulan masalah serupa yang semuanya dapat diselesaikan dengan rumus abstrak tertentu, bukan kumpulan rumus yang dapat digunakan untuk menyelesaikan berbagai masalah. Artinya adalah bahwa polanya sudah ada di sana bahkan sebelum Anda mulai mencoba membuat desain, objek dari perancang adalah menemukannya , bukan memaksakannya.

Lebih jauh, banyak orang melihat pola dan berkata, "Oh, saya baru saja menyelesaikannya dengan .... Saya tidak menggunakan pola konyol." Masalahnya adalah bahwa "...." hampir pasti menggambarkan implementasi AN dari solusi pola yang diberikan. Misalnya, berbagai fungsi pointer dapat berfungsi sebagai Rantai Tanggung Jawab meskipun ini bukan seperti resep tradisional.

Dengan pemikiran ini, fokus dalam studi Anda tentang pola harus pada masalah, bukan pada pola. Pelajari faktor-faktor yang memotivasi pola dan bagaimana mereka mengatasi faktor-faktor tersebut. Melakukan ini akan memungkinkan Anda untuk melihat pola dalam masalah dan kemudian cukup tunjukkan. Ini, bersama dengan bahasa yang diberikan pola kepada kami untuk berbicara tentang desain, memungkinkan Anda untuk mengekspos desain yang cocok untuk menjawab berbagai kesulitan yang Anda hadapi saat ini.

YA, singkatnya, pola belajar tidak hanya layak ... Anda membatasi diri Anda dengan TIDAK mempelajarinya. Saya tidak mau harus menggambarkan semua prinsip yang memotivasi dan bentuk umum dari solusi ketika saya berkata, "Sepertinya saya pengunjung."

Inilah situs web mereka: http://www.netobjectives.com/PatternRepository/index.php?title=Main_Page

Edward Strange
sumber
Sumber yang bagus, tautan itu adalah penjelasan singkat dari sebagian besar pola desain utama. Ini tidak sedalam buku, tetapi itulah keuntungannya.
jhocking
1

Pola Desain yang dijelaskan oleh GoF adalah semacam perpanjangan alami dari paradigma OO. Jika Anda tidak benar-benar memahami tujuan OOP (enkapsulasi, pemisahan masalah, prinsip KERING, modularitas, dll.), Maka mencoba menerapkan Pola Desain dengan sukses tidak masuk akal.

Namun, jika Anda basah kuyup di OOP dunia nyata, dan mencoba untuk setia pada nilai-nilai OOP, Anda pasti akan masuk ke dalam situasi seperti yang dijelaskan oleh GoF, dan kemungkinan Anda akan menemukan solusi yang mirip dengan mereka. Setelah menyelesaikan banyak masalah serupa, Anda mungkin mulai melihat pola muncul; pada titik ini, masuk akal untuk membaca buku; idealnya, Anda akan memiliki rasa pengakuan, dan Anda akan segera menghargai keanggunan dan kebersihan pola yang diusulkan. Kemungkinannya adalah Anda juga akan mempertimbangkan beberapa pola ini tanpa otak (yang, begitu Anda mengetahuinya, banyak di antaranya). Anda juga akan dapat menilai dengan baik apakah suatu pola tertentu berlaku dalam situasi tertentu.

Dan inilah peringatan lain: Hanya karena Anda tahu semua pola ini tidak berarti Anda harus menerapkannya di mana-mana. Beberapa dari mereka cukup pintar, dan orang-orang tergoda untuk menggunakannya bahkan ketika mereka sangat tidak pantas, pola Singleton menjadi contoh paling terkenal (banyak kontroversi Singleton berasal dari penggunaan yang tidak tepat, misalnya ketika tidak ada manfaatnya memiliki satu -instrance-only constraint).

tammmer
sumber
0

Pola desain mencoba memecahkan masalah desing.

  • Mereka dibuat AFAIK terutama untuk bahasa OOP.
  • Beberapa masalah tidak ada dalam pemrograman fungsional (Pola Perintah adalah bagaimana membuat fungsi kelas satu, Pola Strategi mendekati fungsi urutan yang lebih tinggi ...). Pola-pola ini untuk bahasa (terutama OOP) yang tidak membutuhkan fungsionalitas.
  • Mereka diurutkan berdasarkan abjad. Beberapa pola adalah komposisi orang lain atau ide-ide tersebut terdiri dari yang ada sebelumnya.

Saya belajar pola kemudian, setelah saya tahu beberapa pemrograman fungsional, UML, desing basis data, struktur data dan algoritma. Saya sebenarnya baru saja membuat daftar desain pola-pola ini di lembar contekan dan mengangguk bahwa saya sudah tahu sebagian besar dari mereka. Beberapa sangat bagus seperti pola singleton atau "komunikasi" (pengunjung, mediator) ...

pengguna712092
sumber
Pola desain secara eksplisit tidak mencoba memecahkan masalah desain. GoF sendiri menggambarkan mereka sebagai pola umum yang mereka amati dalam pemrograman dunia nyata; tujuannya adalah untuk menggambarkan pola-pola ini sehingga programmer lain dapat mengenali situasi yang sama dan menghindari kesalahan umum dan jebakan, serta menyadari solusi alternatif.
tdammers
0

Saya setuju dengan poin yang dibuat dalam beberapa jawaban lain tentang bagaimana bisa berbahaya menerapkan pola desain dengan sedikit pengalaman.

Namun, saya sangat merekomendasikan membaca setidaknya bab pertama dari buku GoF. Bagian pertama akan memperkenalkan Anda pada pola desain, tetapi sebenarnya lebih banyak tentang prinsip-prinsip desain OO, dan ini harus bermanfaat untuk dibaca dan dipahami bahkan dengan pengalaman yang relatif sedikit. (Beberapa ide kunci yang saya ingat termasuk "merangkum konsep-konsep yang berbeda-beda", "hierarki warisan harus luas tetapi tidak dalam".) Hampir memalukan bahwa karya itu dikenal sebagian besar karena 23 polanya - pembahasannya tentang prinsip-prinsip desain OO yang menginformasikan pola-pola itu juga sangat berharga.

Aidan Cully
sumber
0

Pertanyaan saya adalah, apakah ada baiknya mempelajari pola dalam buku GoF?

Benar! Anda harus belajar tidak hanya pola desain perangkat lunak, tetapi teknik desain secara umum. Mempelajari solusi umum untuk masalah umum adalah awal yang fantastis. Terutama sekali Anda mulai menggali pola dan pengorbanannya.

Apakah mereka menunjukkan cukup sehingga saya harus belajar mereka?

Buku Gang of Four asli dikembangkan dengan memeriksa banyak proyek perangkat lunak dan melihat teknik yang telah digunakan sejumlah pengembang untuk memecahkan masalah. Para penulis memperhatikan beberapa teknik yang sangat bagus, serta sejumlah yang diterapkan dalam proyek-proyek yang sangat terpisah dan bekerja untuk mengabstraksi mereka bahkan lebih untuk digunakan terlepas dari domain.

selalu tampak kontra-intuitif untuk mencoba dan membuat masalah yang cocok dengan pola klasik

Ini adalah masalah besar. Anda tidak membuat masalah cocok dengan solusinya. Sebagai gantinya, buku pola desain Geng Empat memiliki bagian "masalah" untuk setiap pola, dan katalog pola lainnya memiliki bagian yang serupa, yang menjelaskan kapan Anda harus menerapkan setiap pola. Ini juga menggambarkan "konsekuensi" dari penggunaan pola - jika Anda mencoba menghindari konsekuensi, maka menggunakan pola bukanlah ide terbaik.

Thomas Owens
sumber