jump to navigation

Memilih antara Property atau Method 16 Mei 2008

Posted by firstyuyu in Misc.
trackback

Ketika mendesain member dari sebuah tipe data, salah satu tantangan yang harus dihadapi seorang desainer framework adalah memilih apakah sebuah member harus berupa property atau method. Ada dua jenis desain API dalam hubungannya dengan penggunaan property dan method. Dalam method-heavy API, sebuah method mempunyai banyak parameter dan tipe data tersebut hanya mempunyai sedikit property seperti tampak pada contoh berikut:  

class PersonFinder
{
    public string FindPersonName(
        int height,
        int weight,
        string hairColor,
        string eyeColor,
        int shoeSize,
        Connection database
    );
}

Pada property-heavy API, sebuah method hanya mempunyai sedikit parameter dan untuk mengontrol operasi method tersebut lebih banyak digunakan property, seperti tampak pada contoh berikut:

class PersonFinder
{
    public int Height { get; set; }
    public int Weight { get; set; }
    public string HairColor { get; set; }
    public string EyeColor { get; set; }
    public int ShoeSize { get; set; }
 
    public string FindPersonName(Connection database);
}

 

Jika faktor yang lain sama, maka property-heavy API pada umumnya lebih disukai karena method yang mempunyai banyak parameter cenderung akan membingungkan bagi developer yang belum berpengalaman. Alasan lain untuk menggunakan property ialah nilai sebuah property bisa ditampilkan secara otomatis di dalam debugger, sementara untuk menampilkan nilai kembalian sebuah method di dalam debugger memerlukan proses tambahan dan tidak otomatis seperti menampilkan nilai property. Namun method-heavy API juga mempunyai keuntungan dalam hal performance dan mungkin lebih disenangi oleh developer yang telah berpengalaman. Panduan umumnya adalah method harus merepresentasikan aksi/tindakan sementara property merepresentasikan data.

Pertimbangkan:
untuk menggunakan property jika member yang bersangkutan merepresentasikan sebuah atribut bagi sebuah tipe data. Misalnya Button.Color merupakan property karena color (warna) merupakan atribut dari sebuah button.

Lakukan:
Gunakan property daripada method jika nilai dari property tersebut disimpan di dalam memory dan property hanya sekedar menyediakan akses ke nilai tersebut.

Misalnya, sebuah member yang mengembalikan nama Customer dari sebuah field yang ada di dalam obyek Customer, seharusnya merupakan property.

public class Customer{
    public Customer(string name){
        this.name = name;
    }
 
    public string Name{
        get { return this.name; }
    }
 
    private string name;
}

 

Lakukan:
Gunakan method daripada property pada situasi berikut

  • Operasi yang dilakukan memerlukan waktu yang jauh lebih lambat daripada sebuah pengaksesan field. Misalnya, operasi yang melibatkan pengaksesan network atau file system seharusnya dibuat sebagai method bukan property.
  • Operasi yang dijalankan merupakan konversi, misalnya method Object.ToString.
  • Operasi yang dijalankan akan mengembalikan nilai yang berbeda setiap kali ia dijalankan. Misalnya method Random.Next yang akan mengembalikan nilai random yang berbeda setiap kali dipanggil. Namun property DateTime.Now merupakan contoh yang melanggar kaidah ini. Menurut kaidah ini, ia seharusnya merupakan method bukan property.
  • Operasi yang dijalankan mempunyai efek samping yang signifikan. Misalnya, method StreamReader.ReadLine mempunyai efek samping yaitu memajukan pointer file ke baris selanjutnya. Maka sudah benar bahwa StreamReader.ReadLine merupakan sebuah method.
  • Operasi yang dijalankan mengembalikan salinan dari state internal. Ini tidak termasuk state internal yang merupakaan value type karena value type akan selalu disalin ketika kita kembalikan sebagai return value.
  • Operasi yang dijalankan mengembalikan sebuah array.

Komentar»

No comments yet — be the first.

Tinggalkan komentar