Saya sering menggunakan pola di mana saya menggunakan metode chaining untuk mengatur objek, mirip dengan Builder
atau Prototype
pola, tetapi tidak membuat objek baru dengan setiap pemanggilan metode, sebagai gantinya memodifikasi objek asli.
Contoh:
new Menu().withItem("Eggs").withItem("Hash Browns").withStyle("Diner");
Hanya ingin tahu apakah ada nama untuk pola ini dan apakah itu dianggap sebagai anti-pola, karena meskipun dapat membaca lebih lancar, itu dapat menyebabkan rantai metode yang panjang.
design-patterns
coding-style
code-quality
patterns-and-practices
method-chaining
Garrett Hall
sumber
sumber
menu.withStyle("")
tanpa konteks. Anda perlu dua API dalam kasus seperti itu.Jawaban:
Antarmuka Lancar
Saya selalu mendengar tentang metode ini disebut ' antarmuka lancar ', seperti yang dicetuskan oleh Eric Evans (dari Domain Driven Design fame) dan Martin Fowler (dari Agile Manifesto fame).
Kelemahan utama adalah keterbacaan (yang disukai beberapa orang dan beberapa kebencian), dan fakta bahwa mungkin lebih sulit untuk men-debug dalam beberapa kasus karena seluruh rangkaian tindakan dapat dianggap sebagai pernyataan tunggal ketika melangkah melaluinya.
Saya tentu saja tidak menganggapnya sebagai anti-pola, meskipun saya sendiri hanya menggunakan teknik beberapa kali.
sumber
Metode perangkaian seperti itu biasanya disebut Antarmuka Lancar ketika ada semacam aliran atau kemampuan ditemukan dalam rantai. Atau, Anda dapat menganggap api seperti jQuery yang sangat bergantung pada metode chaining sebagai tidak 'lancar' karena tidak ada penekanan yang sama pada kemampuan menemukan - itu lebih untuk kenyamanan.
Sebagai contoh Anda (menggunakan withx, withy) Anda dapat menganggap ini varian dari pola Builder karena Anda memiliki kelas khusus yang, mengingat beberapa keadaan (pemanggilan metode) tahu cara mengembalikan objek yang dikonfigurasi dengan benar.
Ini bukan anti-pola jika digunakan dengan tepat.
sumber
jelas bukan anti-pola. jQuery mungkin implementasi yang paling baik digunakan untuk ini.
Ya itu bisa, tetapi apa alternatifnya? Anda dapat berakhir dengan kalimat bahasa Inggris yang hampir pasti, dengan api memandu Anda untuk apa yang tersedia dan sesuai.
sumber
Ini disebut pola "train wreck".
(Ini anti-pola dan bertentangan dengan Kode Bersih)
Pola "kereta karam" melanggar Hukum Demeter .
sumber
a.getB().getC().doSomething()
. Contoh itu buruk karena "Metode Anda dapat memanggil metode di bidangnya sendiri secara langsung (tetapi tidak di bidang bidang)". Di sini, hanya ada 1 objek, yang sedang dibuat, dan "kamu bisa bermain dengan mainan yang kamu buat sendiri".