Baru-baru ini saya berpikir untuk mengamankan beberapa kode saya. Saya ingin tahu bagaimana orang bisa memastikan sebuah objek tidak pernah bisa dibuat secara langsung, tetapi hanya melalui beberapa metode kelas pabrik. Katakanlah saya memiliki beberapa kelas "objek bisnis" dan saya ingin memastikan setiap instance dari kelas ini akan memiliki status internal yang valid. Untuk mencapai ini, saya perlu melakukan beberapa pemeriksaan sebelum membuat objek, mungkin di konstruktornya. Ini semua baik-baik saja sampai saya memutuskan saya ingin membuat cek ini menjadi bagian dari logika bisnis. Jadi, bagaimana cara mengatur objek bisnis agar dapat dibuat hanya melalui beberapa metode di kelas logika bisnis saya tetapi tidak pernah secara langsung? Keinginan alami pertama untuk menggunakan kata kunci "teman" lama yang baik dari C ++ akan gagal dengan C #. Jadi kami membutuhkan opsi lain ...
Mari kita coba beberapa contoh:
public MyBusinessObjectClass
{
public string MyProperty { get; private set; }
public MyBusinessObjectClass (string myProperty)
{
MyProperty = myProperty;
}
}
public MyBusinessLogicClass
{
public MyBusinessObjectClass CreateBusinessObject (string myProperty)
{
// Perform some check on myProperty
if (true /* check is okay */)
return new MyBusinessObjectClass (myProperty);
return null;
}
}
Tidak apa-apa sampai Anda ingat bahwa Anda masih bisa membuat instance MyBusinessObjectClass secara langsung, tanpa memeriksa inputnya. Saya ingin mengecualikan kemungkinan teknis itu sama sekali.
Lantas, apa pendapat masyarakat tentang ini?