Bagaimana Anda mendapatkan praktik yang baik untuk desain OOP Anda? [Tutup]

12

Saya menyadari bahwa saya mengalami kesulitan membuat desain OOP. Saya menghabiskan banyak waktu untuk memutuskan apakah properti ini diatur dengan benar ke kelas X.

Misalnya, ini adalah pos yang memiliki beberapa hari: /codereview/8041/how-to-improve-my-factory-design

Saya tidak yakin dengan kode saya. Jadi saya ingin meningkatkan desain saya, mengambil lebih sedikit waktu untuk membuatnya.

Bagaimana Anda belajar membuat desain yang bagus? Beberapa buku yang bisa Anda rekomendasikan kepada saya?

Darf Zon
sumber
Apa level Anda saat ini? Saya kira Anda tahu tentang pola desain?
ACNB
Tidak sama sekali, pada kenyataannya, saya mulai membaca beberapa dari mereka dalam kursus PluralSight
Darf Zon
1
Salah satu buku paling berpengaruh dalam desain perangkat lunak adalah '' Pola Desain: Elemen-elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali ''. Masih layak dibaca, meskipun sekarang agak ketinggalan jaman. Anda juga dapat mulai membaca [ en.wikipedia.org/wiki/Software_design_pattern[(wikipedia artikel). Pola desain perangkat lunak ini tidak hanya memberi Anda solusi yang baik untuk masalah umum, tetapi juga bagian dari terminologi profesional sekarang.
ACNB
1. menulis - 2. meninjau (termasuk membaca literatur dan situs-situs seperti P.SE) - 3. refactor - 4. mengulang
HorusKol
tidak ada pengganti untuk pengalaman, tidak ada jalan pintas untuk pengetahuan semacam ini

Jawaban:

14

Merancang sistem adalah salah satu hal yang hanya bisa Anda lakukan dengan lebih baik. Tentu saja, ini sedikit membantu untuk membaca tentang desain yang bagus - buku desain umum berorientasi objek yang direkomendasikan adalah Pola Desain Geng Empat : Elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali . Ada juga buku-buku lain tentang pola dan prinsip desain untuk berbagai jenis sistem dan dalam domain yang berbeda.

Lebih baik melibatkan orang lain. Setelah Anda membuat desain, sampaikan masalah yang Anda selesaikan dan desain tersebut kepada orang lain untuk ulasan kritis. Dengarkan umpan balik mereka dan berdialog dengan mereka, dengan fokus pada mengapa Anda membuat keputusan yang Anda lakukan. Ketika Anda menerapkan solusi, Anda akan menyadari masalah lain dengan desain Anda. Catat ini dan belajar dari mereka. Mungkin juga merupakan ide yang baik untuk bekerja dengan orang lain untuk meninjau implementasi terhadap desain dan persyaratan juga, dan berdiskusi kritis tentang alasan mengapa Anda melakukan hal-hal yang Anda lakukan.

Meskipun saya biasanya merasa lebih baik untuk duduk dengan orang lain secara langsung, pertanyaan desain spesifik dapat ditanyakan di sini di Programmer. Ada juga situs Stack Exchange untuk ulasan kode dan pertanyaan implementasi .

Thomas Owens
sumber
4

Dari tampilan pertanyaan codereview yang Anda tanyakan, Anda berada pada tahap berlebihan. Saya pikir ini adalah masalah yang agak umum di antara orang-orang yang menemukan pentingnya desain yang baik.

Ini sebenarnya langkah alami dan bahkan mungkin perlu dengan keahlian apa pun yang Anda pilih. Ketika Anda mulai mempelajari sesuatu, semakin Anda maju dalam pengetahuan tentang keterampilan dan semakin Anda menerapkannya, semakin baik hasil Anda dan tampaknya Anda langsung menuju penguasaan. Masalahnya adalah, bahwa target baru Anda menjadi bukan kualitas hasil Anda, tetapi seberapa banyak pengetahuan yang telah Anda kumpulkan pada keterampilan Anda.

Penguasaan sejati suatu keterampilan melibatkan pemahaman tentang kapan menggunakannya dan kapan tidak. Terlalu sering menggunakan keterampilan itu mungkin satu-satunya cara untuk mengembangkan pemahaman seperti itu. Tentu, Anda dapat membaca tentang ini, tetapi membaca bukanlah pengganti pengalaman.

Untuk satu hal, membaca tentang pola desain adalah awal yang buruk. Membaca tentang prinsip-prinsip desain OO, seperti SOLID dan GRASP lebih baik. Setelah berkenalan dengan mereka, mempelajari pola desain umum adalah ide yang baik, karena Anda akan melihat bagaimana prinsip-prinsip itu dapat diterapkan untuk membentuk idiom konkret.

Dikatakan, bahwa ketika pola muncul dalam penggunaan bahasa, maka bahasa tersebut sebenarnya tidak memiliki fitur. Meskipun pernyataan ini sangat radikal, ada banyak kebenaran di dalamnya. Karena itu saya sarankan, Anda melihat dan bermain-main dengan bahasa lain untuk mendapatkan pemahaman yang lebih baik tentang konsep yang ingin Anda gunakan, dan juga untuk belajar tentang konsep baru. Daftar singkat adalah Squeak, Ruby dan Lisp.
Adapun Daftar, rekomendasi pribadi saya adalah Struktur dan Interpretasi Program Komputer , yang mengajari saya banyak hal tentang desain, dengan menunjukkan kepada saya bagaimana seseorang dapat dengan mudah menciptakan solusi yang kuat untuk masalah yang kompleks, dengan sedikit lebih dari abstraksi yang jelas dan komposisi (de) dalam cara top-down.

Jadi, inilah yang saya sarankan:

  1. tulis kode (dan coba pahami apa yang membuatnya buruk)
  2. membaca kode (dan mencoba memahami apa yang membuatnya baik)
  3. bertukar pengetahuan dengan orang lain. ujilah ide-ide Anda.
back2dos
sumber
Ini saran yang bagus! Saya benar-benar pada titik lebih menerapkan pengetahuan pola desain saya, seperti dapat dilihat dalam diskusi saya dengan Kevin di sini
TheSilverBullet
3

Seperti yang disebutkan orang lain, Anda hanya akan menjadi ahli dengan latihan dan pengalaman. Sebenarnya tidak ada banyak jalan pintas yang dapat Anda ambil.

Fakta bahwa Anda melihat kembali barang-barang Anda dan Anda tidak menyukai apa yang telah Anda tulis, sudah menempatkan Anda di depan kurva dibandingkan banyak orang lain dalam profesi kami. Ketika Anda mencoba untuk meningkatkan diri sendiri, kita semua bekerja dengan orang-orang yang akan menulis fungsi 500-baris dengan 20 parameter, semua diteruskan dengan referensi dan 15 di antaranya [masuk / keluar] dan orang-orang itu berpikir mereka adalah bom karena mereka punya kekacauan untuk bekerja.

Ketika datang ke desain perangkat lunak, itu bukan hitam dan putih, baik desain itu baik atau buruk. Tidak peduli berapa banyak pengalaman yang Anda miliki, Anda akan kembali ke beberapa kode lama Anda dan berpikir, "apa yang saya merokok ketika saya menulis ini?" Kuncinya adalah evaluasi terus-menerus terhadap berbagai hal dan sering melalui latihan pemikiran untuk mengevaluasi apa yang membuat kode yang baik baik dan buruk.

Akhirnya, meskipun tidak ada yang menggantikan praktik, selalu merupakan ide yang bagus untuk selalu membaca blog / buku / situs ini karena orang lain akan menunjukkan perspektif berbeda yang mungkin tidak Anda pertimbangkan.

Untuk memulai saya akan merekomendasikan buku-buku ini:

  • Prinsip Agile, Pola dan Praktek di C # - Saya sendiri 3/4 melalui buku ini. Salah satu poin utama yang penulis buat, dan saya setuju 100% dengan itu, jangan mulai memecahkan masalah dengan mencari pola desain untuk diterapkan. Usahakan sesederhana mungkin dan kembangkan kode menjadi suatu pola, jika alternatifnya mulai menjadi lebih rumit dari itu.
  • Head First Design Patterns - Saya belum membaca buku ini dan di IMO banyak seri Head First yang ditargetkan khusus untuk pendatang baru di lapangan. Jadi mereka cenderung berada di sisi yang lebih sederhana, tetapi saya telah mendengar / membaca banyak tanggapan baik dari orang lain tentang buku itu
DXM
sumber
1
+1: "Buat semuanya sesederhana mungkin" ... "Evolve the code to a pattern ..."
kevin cline
1

Desain depan tidak pernah sebagus desain out-back. Cukup uji, kode, dan refactor. Ketika semuanya jelek, dan Anda tidak yakin bagaimana cara membersihkannya, maka lihat apakah beberapa pola desain akan membantu. Praktekkan ini sebentar dan pengembang lain akan bertanya bagaimana Anda menghasilkan desain yang bersih.

kevin cline
sumber