Bagaimana jika saya tidak akan menggunakan Pola Desain Perangkat Lunak? [Tutup]

17

Masalah apa yang mungkin saya hadapi, jika saya tidak akan menggunakan Pola Desain Perangkat Lunak? Bisakah Anda ceritakan tentang masalah mendekati desain menggunakan teknik berorientasi objek standar?

iStudent
sumber
24
Cukup beberapa Pola Desain Perangkat Lunak yang cukup jelas. Anda harus mengenal mereka semua dengan sangat baik untuk memastikan Anda tidak menggunakannya - mungkin cukup baik sehingga Anda bisa menggunakannya!
James McLeod
18
Sebagai titik balik ke @JamesMcLeod, banyak "Pola Desain" sangat jelas dan hal-hal yang semua orang akan lakukan. Mengapa kita memberi mereka nama? Untuk keperluan komunikasi. "Saya menggunakan pola X" memiliki kerapatan semantik yang jauh lebih besar daripada menjelaskan solusi Anda dengan harapan ujung lainnya akan berbunyi "Oh ya! Saya sudah melakukannya juga, kecuali saya memanggil variabel saya ...".
Phoshi
6
@ AJMansfield Beberapa kode terburuk yang pernah saya lihat melibatkan terlalu antusiasme untuk pola desain.
Erik Reppen
5
@ErikReppen kesalahan karena terlalu sering menggunakan pola desain harus dikaitkan dengan orang yang melakukannya. Dari sudut pandang saya, masalah intinya bukan pada pola desain itu sendiri, tetapi generalisasi berlebihan (sebagian karena kurangnya pengawasan arsitektur) dan rekayasa berlebihan (kadang-kadang oleh komite-insinyur).
rwong
5
"Pola Desain" adalah leksikon, bukan teknik.
Kaz Dragon

Jawaban:

76

Anda tidak mengerti intinya.

Pola Desain secara inheren ada ketika melakukan desain perangkat lunak, seperti pola struktural yang ada di dunia. Bahkan jika Anda tidak tahu nama benda, pada akhirnya Anda akan menemukan bahwa struktur fisik tertentu cocok untuk masalah tertentu. Anda akan menemukan bahwa bentuk segitiga batang kayu / logam / etc adalah struktur yang sangat stabil, tetapi hanya pada bidang. Anda akan menemukan batu bata persegi memiliki kelebihan tertentu daripada yang bulat ...

Demikian juga, struktur perangkat lunak tertentu dalam beberapa cara unik atau optimal. Anda akhirnya akan menemukannya dan menggunakannya terlepas jika Anda tahu nama untuk mereka. Itulah inti dari apa pola desain - mereka adalah nama untuk struktur ini yang diketahui dan digunakan oleh pemrogram berpengalaman. Ini memberi programmer kemampuan untuk berkomunikasi jauh lebih seragam dan ringkas. Ini juga memungkinkan pemrogram berpikir dalam konsep pola dengan lebih sadar.

Jadi dua poin utama yang saya coba buat:

  1. Anda tidak dapat tidak menggunakan pola desain.
  2. Dengan tidak mengetahui nama-nama untuk hal-hal yang Anda gunakan, Anda akan kesulitan bekerja dalam tim.
Telastyn
sumber
12
+1: Benar sekali. Saya memulai pengembangan OO sebelum pola desain menjadi dikenal atau populer. Ya, kami juga menemukan hal - hal seperti pabrik, lajang, dan sesuatu yang, ketika Anda menyipitnya dalam semacam cahaya terang seperti pola Strategi. Intinya sekarang saya tahu pola desain. Saya tahu pabrik-pabriknya baik-baik saja tetapi bisa dilakukan dengan lebih baik, Singletons dilakukan dengan buruk dan apa yang mungkin menjadi pola Strategi akan jauh lebih baik jika sebenarnya itu adalah pola Strategi.
Binary Worrier
3
... Mempelajari pola desain, dan mempelajari cara menggunakannya dengan benar menghemat banyak waktu, Anda cenderung mencoba menciptakan kembali roda, menghentikan Anda dari mengarahkan diri Anda ke jalan menuju desain yang buruk dan membangun solusi yang buruk. Sedot dan pelajari polanya, gunakan ketika mereka bekerja untuk Anda, dan jangan gunakan saat mereka tidak mau.
Binary Worrier
1
Dan ini meringkas dengan tepat pandangan saya tentang pola. Itu adalah alat yang luar biasa untuk mengkomunikasikan apa yang Anda lakukan dengan orang lain. Anda tidak pernah membangunnya persis karena setiap masalah berbeda. Tetapi mereka adalah intisari, arah, dan seperangkat pedoman kasar untuk diikuti, dan membuatnya mudah untuk menjelaskan kepada orang lain apa yang sedang Anda lakukan.
Matt D
+1 untuk perbandingan dengan struktur fisik. Saya akan menambahkan bahwa membantu membangun rumah jika Anda sudah tahu bahwa "rangka" adalah struktur yang baik untuk menopang beban atap, daripada bereksperimen dan berharap itu tidak runtuh.
kdgregory
39

Mereka yang tidak dapat mengingat masa lalu dikutuk untuk mengulanginya.

Anda tidak akan menghadapi masalah khusus apa pun selain yang diajukan oleh desain Anda. Dan pada saatnya Anda akan berakhir menggunakan pola-pola itu tanpa menyadarinya, Anda hanya menghabiskan waktu untuk memikirkannya sendiri. Mengetahui pola-pola sebelumnya membuat mereka lebih mudah dikenali dalam desain dan menghasilkan keuntungan besar yang dibuktikan oleh sejumlah individu.

Segala sesuatu yang sedang dikembangkan saat ini sebagian besar didasarkan pada pengetahuan sebelumnya, tidak masuk akal untuk mengabaikannya. Bayangkan membangun gedung pencakar langit hari ini tanpa mengetahui masalah yang dihadapi oleh orang-orang yang membangun katedral beberapa ratus tahun yang lalu.

devnull
sumber
10
"Setiap kutipan memiliki tanda kutip yang sama dan berlawanan." "Kita harus merobek masa lalu jika kita benar-benar pantas mendapatkan masa depan." (Oke yang itu adalah Hitler jadi mungkin yang terbaik untuk mengabaikannya ....)
Russell
20

Masalah apa yang mungkin saya hadapi, jika saya tidak akan menggunakan Pola Desain Perangkat Lunak?

Anda akan memiliki masalah karena tidak dapat menulis perangkat lunak apa pun.

Variabel adalah pola desain.

Metode adalah pola desain.

Operator - penjumlahan, pengurangan, dll - adalah pola desain.

Pernyataan adalah pola desain.

Nilai adalah pola desain.

Referensi adalah pola desain.

Ekspresi adalah pola desain.

Kelas adalah pola desain.

...

Semua yang Anda lakukan dalam pemrograman setiap saat adalah pola desain . Sebagian besar pola itu sudah tertanam dalam pemikiran Anda sehingga Anda berhenti memikirkannya sebagai "pola desain". Hal-hal yang harus Anda pelajari seperti "pola tunggal" dan sebagainya hanyalah pola yang belum (belum) dimasukkan ke dalam bahasa apa pun yang Anda gunakan.

Bisakah Anda ceritakan tentang masalah mendekati desain menggunakan teknik berorientasi objek standar?

Tidak. Saya tidak tahu apa artinya pertanyaan ini. Pola desain yang "teknik berorientasi objek standar" - itulah yang membuat mereka merancang pola . Pola desain adalah teknik standar untuk memecahkan masalah tertentu, khususnya (meskipun tidak harus ) dalam bahasa berorientasi objek.

Eric Lippert
sumber
1
The things that you have to learn like "the singleton pattern" and so on are simply patterns that haven't (yet) been baked into whatever language you're using.- Itulah (hampir) definisi pola desain - kode yang fleksibel / mudah digunakan kembali digunakan untuk mengatasi keterbatasan dalam bahasa itu sendiri, yang mudah untuk berkomunikasi dengan orang lain. Setelah bagian dari bahasa, itu bukan lagi pola desain.
Izkata
1
@Izkata: Jadi posisi Anda adalah, katakanlah, pola pengamat tidak mungkin dalam C # karena C # memiliki pola pengamat yang dibangun ke dalam bahasa dalam bentuk peristiwa? Itu konyol. Bit khusus bahasa yang relevan dengan suatu pola adalah cara kanonik untuk menerapkan pola dalam bahasa. Tentu saja pola desain dapat digunakan dalam bahasa yang mendukungnya secara langsung; itulah inti dari mendukung mereka secara langsung!
Eric Lippert
Saya tidak pernah mengatakan tidak mungkin, saya berusaha menyiratkan hal yang tidak perlu . Java, misalnya , tidak memiliki peristiwa sehingga menggunakan pola desain untuk mensimulasikan mereka.
Izkata
@Izkata: Saya bingung. Anda mengatakan bahwa sekali suatu pola adalah bagian dari bahasa, itu bukan lagi sebuah pola. Jadi apakah "pola pengamat" adalah pola di Jawa tetapi bukan pola di C #?
Eric Lippert
1
Atau dengan kata lain, pola desain adalah apa pun yang dilakukan oleh seorang programmer, daripada yang dapat dijelaskan dalam bahasa Inggris. Saya tidak yakin saya sepenuhnya setuju dengan definisi, tetapi saya pikir itu secara akurat mencerminkan apa yang Anda katakan dan setidaknya memiliki manfaat dari penilaian subyektif yang dianggap sebagai sebuah pola. Ini adalah properti analisis dari apa yang dilakukan programmer, dan tentu saja tidak mungkin bagi seorang programmer untuk bertindak dengan cara yang tidak dapat dianalisis :-)
Steve Jessop
4

Memahami titik dari pola desain lebih penting daripada menggunakannya untuk surat itu. Beberapa pola, IMO, konyol, setidaknya dalam paradigma bahasa yang biasa saya gunakan. IMO, seorang programmer yang hanya menggunakan pola desain secara membabi buta dan tanpa benar-benar memahaminya adalah programmer yang lebih buruk daripada orang yang ingin memikirkan hal-hal itu sendiri. Tetapi seseorang yang membiasakan diri dengan ide-ide dan kemudian memutuskan sendiri apakah mereka berharga cenderung menjadi programmer yang jauh lebih kuat daripada keduanya.

Yang mengatakan, saya tidak punya! @ # $ Ing tahu apa gunanya kelas terbang dan saya tidak malu mengakuinya. (lihat komentar untuk entri wikipedia lain yang banyak membantu)

Saya merekomendasikan entri wikipedia tentang pola desain. Ini ditulis dengan sangat ringkas dan jelas. Sangat membantu untuk mendapatkan ide mengapa seseorang mungkin repot dengan pola desain yang diberikan atau tidak. Saya pribadi cenderung menemukan yang paling sederhana yang paling berguna dan tidak akan berpikir dua kali untuk memodifikasi implementasi pola apa pun yang sesuai dengan kebutuhan saya.

Itu ide, bukan cetak biru. Dalam beberapa bahasa mereka sama sekali bukan ide yang bagus. Di tempat lain, mereka dianggap sebagai kludges untuk mengatasi kelemahan desain bahasa yang mungkin lebih baik dikompensasi melalui kompleksitas yang kurang. Bagaimanapun, tidak ada salahnya untuk memeriksa mereka dan mencoba untuk memahami tantangan yang harus mereka atasi sebelum memutuskan solusi pilihan Anda sendiri.

Jenis masalah apa yang akan Anda hadapi? Anda mungkin kehilangan peluang dan menghabiskan lebih banyak waktu untuk masalah daripada yang Anda butuhkan kecuali Anda seorang jenius pemrograman yang sudah memiliki semuanya. Sangat penting untuk mempertahankan pandangan kritis terhadap ide-ide pemrograman populer tetapi tidak ada salahnya untuk memahami apa yang dipikirkan orang yang sedang mereka pecahkan karena itu akan memberikan lebih banyak kejelasan untuk solusi / pendekatan pilihan Anda sendiri.

Erik Reppen
sumber
2
kelas terbang (bukan roda gila). Baca paragraf pertama (dan hanya paragraf pertama) dari artikel wikipedia dan kemudian lihat Integer.valueOf (int) dan pertimbangkan berapa kali ini menghindari membuat bilangan bulat baru untuk nilai-nilai umum.
2
@MichaelT Dan sial. Itu mengejanya jauh lebih baik dari apa yang saya lihat. Terima kasih.
Erik Reppen
Masalah yang saya lihat dengan sebagian besar instruksi pola desain adalah bahwa mereka mencoba untuk memberikan tampilan proyek yang besar (buku GoF adalah semua tentang menulis pengolah kata - bukan tugas kecil). Tetapi kadang-kadang mereka berlaku untuk hal-hal yang jauh lebih kecil (hampir 'sepele'). 7 baris kode dapat dengan jelas menggambarkan kelas terbang dalam sesuatu yang digunakan setiap orang secara konstan. Jauh lebih mudah dipahami daripada proyek-proyek besar atau contoh-contoh yang dibuat-buat.
1
@MichaelT Bagi saya itu juga contoh yang baik tentang bagaimana mendapatkan sedikit kejelasan tentang sesuatu adalah membantu untuk menulis kode secara umum bahkan jika ide itu tidak langsung digunakan dalam bahasa utama saya, JavaScript, di mana warisan dan penutupan prototipal biasanya digunakan untuk menyelesaikannya masalah. Memiliki momen a-ha itu masih memberi saya beberapa ide yang relevan.
Erik Reppen
2

Masalah utama yang akan Anda hadapi adalah Anda akan menemukan kembali roda . Mereka disebut pola karena mereka sering muncul dan dengan cara yang dapat diprediksi.

pgpb.padilla
sumber
0

Bahkan jika Anda mengikuti pola desain Anda mungkin berakhir dengan desain yang buruk. Pola desain alami dan Anda akhirnya akan menggunakan beberapa rasa dalam desain Anda. Anda harus berusaha sangat keras untuk tidak menggunakan salah satu pola. Tidak ada alasan untuk mengutuk pola desain, yang lebih penting adalah memilih pola yang tepat untuk kebutuhan Anda

ViSu
sumber
-1

Anda menggunakan pola desain sepanjang waktu tanpa menyadarinya. Banyak perpustakaan standar dalam bahasa populer dirancang dengan pola desain dalam pikiran. Contohnya adalah FileReaderperpustakaan Java yang dirancang menggunakan pola desain dekorator . Sekarang berbicara tentang kode Anda sendiri , Anda tidak dipaksa untuk menggunakan pola desain (dalam kebanyakan kasus). Pola desain adalah "solusi yang dapat digunakan kembali untuk masalah yang biasa terjadi" , yang berarti itu akan membantu Anda dengan menulis kode yang lebih bersih lebih bersih sehingga sangat terserah Anda berapa banyak Anda ingin menghindari berakhir dengan kode spaghetti.

Savv
sumber