Hari ini di tempat kerja, salah seorang kolega saya meninjau kode saya, dan menyarankan agar saya menghapus properti hanya set dan menggunakan metode sebagai gantinya.
Ketika kami berdua sibuk dengan hal-hal lain, dia menyuruh saya untuk melihat Property Design
bagian dari buku "Kerangka Desain Pedoman". Dalam buku itu penulis hanya berkata untuk menghindari:
Properti dengan setter memiliki aksesibilitas yang lebih luas daripada pengambil
Dan sekarang saya bertanya-tanya mengapa tidak disarankan untuk memiliki properti set-only? Bisakah seseorang mengklarifikasi untuk saya?
design
code-quality
code-reviews
code-smell
Prashant Cholachagudda
sumber
sumber
Password
properti diUser
kelas. Anda dapat mengaturnya, tetapi Anda tidak bisa mendapatkannya. Anda kemudian dapat memilikiHashedPassword
properti hanya baca . Memanggil set akan melakukan hash dan mengubahHashedPassword
properti. Saya tidak akan meneriaki Anda jika Anda melakukan itu.Jawaban:
Saya pikir itu mungkin ada hubungannya dengan harapan. Properti set-only tidak umum dan properti biasanya digunakan untuk set "dumb" hanya untuk menyimpan nilai tanpa banyak pemrosesan. Jika Anda melakukan banyak pekerjaan dalam setter, lebih baik menggunakan metode - orang berharap metode berpotensi memakan waktu lama untuk dieksekusi dan berpotensi memiliki efek samping. Menerapkan perilaku serupa di properti dapat menghasilkan kode yang melanggar harapan.
Berikut adalah bagian yang relevan dari Pedoman Penggunaan Properti Microsoft :
sumber
Karena itu tidak masuk akal dalam banyak kasus. Properti apa yang mungkin Anda miliki yang dapat Anda atur tetapi tidak dibaca?
Jika OO dimaksudkan untuk mewakili dunia nyata dengan lebih baik, properti hanya set cenderung menyarankan bahwa pemodelan Anda cukup bagus.
Sunting : Lihat juga: /programming/4564928/are-set-only-properties-bad-practice yang pada dasarnya mengatakan itu tidak intuitif dan properti hanya set pada dasarnya adalah metode dengan nama lain sehingga Anda harus menggunakan metode.
sumber
Foo Foo { private get; set; }
? Saya tidak akan menyebut itu hanya menulisYah, saya membayangkan bahwa jika Anda dapat menetapkan properti pada sesuatu tetapi tidak pernah mendapatkannya, Anda tidak akan pernah tahu jika sesuatu yang lain mengubah / menimpa nilai yang Anda tetapkan. Itu bisa menjadi masalah jika Anda mengandalkan nilai yang Anda tetapkan, dan Anda tidak dapat (karena alasan tertentu) untuk bertahan sampai waktu yang Anda inginkan.
Menggunakan metode alih-alih properti set-only akan sedikit membingungkan bagi pengguna. The nama metode biasanya menunjukkan set- atau get , tapi nama properti biasanya tidak menunjukkan sesuatu yang dapat hanya diatur dan tidak didapat. Saya kira jika properti itu sesuatu seperti "ReadOnlyBackgroundColour" itu tidak akan membingungkan untuk coders lain, tetapi itu hanya akan terlihat aneh.
sumber
Ini adalah topik yang sangat lama tetapi telah melompat ke pandangan saya pada tahap akhir ini dan saya ingin beberapa komentar ketika saya mencoba membuat kasus untuk properti hanya-tulis ...
Saya memiliki satu set
ActiveReport
kelas yang merupakan bagian dari situs web yang dipakai dan berjalan pada postback setelah sejumlah pilihan pengguna.Kode VB terlihat seperti ini:
Laporan-laporan ini menggunakan nyali generik,
CommonReader
mengambil prosedur tersimpan dan larik defaultSqlParameter
, yang masing-masing memiliki properti WriteOnly terkait yang, tergantung pada desain laporan, dapat diteruskan sebagai parameter pada instantiasi atau ditetapkan oleh pengguna setelah instantiasi sebelumnya memanggilRun
metode laporan .Jadi, seperti yang saya lihat, memiliki properti hanya menulis dalam kasus ini
SqlParameter
jenisnya generikSqlParameter
s adalah kelas dan bukan nilai primitif, Properti WriteOnly memungkinkan antarmuka yang lebih sederhana untuk pengaturan parameterJadi itulah pikiranku.
Bisakah saya mengubahnya menjadi metode saja? Tentu tetapi antarmuka tampaknya ... kurang bagus
melawan
sumber