Berikut adalah beberapa argumen untuk properti dan kontra-argumen saya:
Lebih mudah digunakan daripada menulis metode pengambil dan penyetel
Pasangan metode pengambil dan penyetel adalah bau kode. Membuatnya lebih mudah untuk menulis ini seperti membuatnya lebih mudah untuk gagal dalam ujian matematika dengan menggunakan formulir Scantron dan mengisi semua 'C'. Objek yang hanya berisi status, untuk ketekunan, tidak boleh menggunakan getter / setter dan harus membuat objek tidak berubah pada saat kegigihan.
Yang penting bagi konsumen suatu objek adalah apa yang dilakukannya, bukan bagaimana melakukannya. Perilakunya adalah apa yang dilakukannya; keadaannya adalah bagaimana ia melakukannya. Jika Anda mendapati diri Anda peduli dengan keadaan objek (kecuali kegigihan, meskipun ini juga merusak OO), Anda tidak melakukan OOP dan kehilangan kelebihannya.
Mereka memberikan indikasi kinerja yang kasar kepada konsumen
Ini adalah sesuatu yang bisa berubah di masa depan, untuk properti apa pun. Misalkan dalam rilis 1.0, mengakses PropertyX hanya mengembalikan bidang. Dalam rilis 1.5, jika bidangnya nol, PropertyX menggunakan pola Objek Null untuk membuat objek null baru. Dalam rilis 2.0, bidang ini semakin divalidasi oleh metode pengambil di PropertyX.
Ketika properti semakin kompleks, indikasi kinerja menggunakan properti tampaknya semakin tidak jujur.
Mereka lebih baik daripada bidang publik
Ini benar. Tapi begitu juga metode.
Mereka mewakili aspek yang berbeda secara fundamental dari suatu objek daripada metode, dan semua konsumen objek harus peduli tentang hal ini
Apakah Anda yakin kedua pernyataan di atas benar?
Mereka lebih mudah mengetik, bung
Tentu, mengetik myObject.Length
lebih mudah daripada mengetik myObject.Length()
, tetapi tidak bisakah itu diperbaiki dengan sedikit gula sintaksis?
Mengapa menggunakan metode alih-alih properti?
Tidak ada jaminan kinerja. API akan tetap jujur bahkan jika metodenya menjadi lebih kompleks. Konsumen akan perlu membuat profil kode mereka jika mereka menjalankan masalah kinerja, dan tidak bergantung pada kata-of-API.
Kurang bagi konsumen untuk dipikirkan. Apakah properti ini memiliki setter? Metode yang pasti tidak.
Konsumen berpikir dari pola pikir OOP yang tepat. Sebagai konsumen API, saya tertarik berinteraksi dengan perilaku objek. Ketika saya melihat properti di API, tampilannya sangat mirip keadaan. Bahkan, jika properti melakukan terlalu banyak, mereka seharusnya tidak menjadi properti, jadi benar-benar, properti dalam keadaan API ARE seperti yang terlihat oleh konsumen.
Pemrogram API akan berpikir lebih mendalam tentang metode dengan nilai pengembalian, dan menghindari mengubah keadaan objek dalam metode tersebut, jika memungkinkan. Pemisahan perintah dari pertanyaan harus ditegakkan sedapat mungkin.
Jadi saya bertanya kepada Anda, mengapa menggunakan properti alih-alih metode? Sebagian besar poin pada MSDN adalah bau kode dalam dan dari dirinya sendiri, dan tidak termasuk dalam properti atau metode.
(Pikiran-pikiran ini datang kepada saya setelah memikirkan tentang CQS.)
type GetFoo() void SetFoo()
sepuluh ribu kali. Sepanjang waktu saya menulis kode C # saya tidak pernah bingung dengan properti.