Apa yang Anda sebut kelas tanpa metode?
Sebagai contoh,
class A
{
public string something;
public int a;
}
Di atas adalah kelas tanpa metode apa pun. Apakah jenis kelas ini memiliki nama khusus?
Apa yang Anda sebut kelas tanpa metode?
Sebagai contoh,
class A
{
public string something;
public int a;
}
Di atas adalah kelas tanpa metode apa pun. Apakah jenis kelas ini memiliki nama khusus?
Jawaban:
Sebagian besar waktu: Pola anti.
Mengapa? Karena memfasilitasi pemrograman prosedural dengan kelas "Operator" dan struktur data. Anda memisahkan data dan perilaku yang bukan OOP yang baik.
Sering kali: A DTO (Objek Transfer Data)
Baca hanya struktur data yang dimaksudkan untuk bertukar data, yang berasal dari objek bisnis / domain.
Terkadang: Hanya struktur data.
Yah kadang-kadang, Anda hanya perlu memiliki struktur untuk menyimpan data yang sederhana dan sederhana dan tidak memiliki operasi di atasnya. Tapi kemudian saya tidak akan menggunakan bidang publik tetapi accessor (getter dan setter).
Saya akan menyebutnya struct
atau record
karena digunakan untuk penyimpanan data dan ini sangat umum untuk bahasa seperti yang C
Anda lihat di sana: struct (bahasa pemrograman C) . Jadi secara pribadi saya lebih suka menggunakan struct
kelas daripada yang lebih cocok dan mudah dibaca:
struct A
{
public string something;
public int a;
}
Biasanya mereka digunakan sebagai DTO (Data Transfer Object) sebagaimana dikatakan yang lain.
Ini dikenal sebagai Plain Old __ Objects (PO_Os) di mana yang kosong adalah Java atau C atau CIL, atau bahasa apa pun yang Anda gunakan.
Jika mereka digunakan sebagai blok data sederhana untuk komunikasi, maka mereka dapat dikenal sebagai Data Transfer Objects (DTOs).
Jika mereka mewakili beberapa data yang disediakan secara eksternal, mereka dapat dikenal sebagai Entitas .
Saya akan menyebut kelas semacam itu sebagai pemegang data yang bisa berubah, dan kadang-kadang menggunakan bentuk umum:
class DataHolder<T>
{
public T dat;
}
Perhatikan bahwa membungkus dat
suatu properti akan menurunkan kinerja dan tidak menawarkan keuntungan, karena tidak ada yang dapat dilakukan oleh seorang pengakses properti (selain membaca / menulis bidang) yang tidak akan merusak beberapa implementasi. Lebih lanjut, mungkin diperlukan untuk menggunakan Interlocked
metode dengan dat
(atau, jika itu adalah struct, dengan bidang-bidangnya), tetapi itu tidak akan mungkin jika dat
dibungkus dalam sebuah properti.
Perhatikan bahwa sementara pemegang data yang bisa berubah mungkin berguna untuk tipe (bisa berubah atau tidak) yang perlu menyimpan data, mereka tidak dapat dengan aman digunakan untuk pertukaran data dengan cara yang sama seperti tipe yang tidak bisa diubah. Misalnya, pernyataan seperti:
myData = myCollection.GetData(myKey);
akan memiliki makna yang jelas jika GetData
mengembalikan tipe kelas yang tidak dapat diubah atau sebuah struct ("dapat diubah" atau tidak) yang tidak mengandung referensi ke data yang dapat diubah. Namun, jika mengembalikan objek kelas yang dapat diubah, tidak akan jelas apakah perubahan apa pun pada objek itu akan secara konsisten diabaikan oleh koleksi yang mendasarinya, secara konsisten menghasilkan pembaruan yang bersih untuknya, atau menyebabkan beberapa perilaku yang menjengkelkan atau tidak terduga yang tidak memenuhi deskripsi.
Jika seseorang ingin memiliki koleksi pengembalian data dalam objek yang bisa berubah, paradigma yang benar sering kali akan seperti:
var myData = new WhateverType();
myCollection.GetData(myKey, myData);
myData.ModifySomehow();
myCollection.StoreData(myKey, myData);
Menggunakan pendekatan itu, ada implikasi yang jelas yang GetData
akan menyebabkan myData
diisi dengan data dari koleksi, tetapi myCollection
tidak akan diharapkan untuk menyimpan referensi setelah fungsi selesai, juga tidak akan menggunakannya untuk tujuan lain. StoreData
juga akan menyalin informasi myData
ke struktur data internalnya sendiri tanpa menyimpan referensi. Perhatikan bahwa salah satu keuntungan dari pendekatan ini adalah bahwa jika kode klien akan membaca banyak item data dalam satu loop, itu dapat dengan aman membuat satu instance dari myData
luar loop, dan kemudian menggunakan kembali instance yang sama setiap saat. Demikian juga, myCollection
mungkin dapat menggunakan kembali objek instance yang terkait dengan kunci (menyalin data dari instance yang diteruskan) tanpa harus membuat instance baru.