Akhir-akhir ini ada semacam revolusi melawan lajang, tetapi apakah ada yang salah dengan mereka jika mereka tidak memiliki kewarganegaraan?
Saya tahu pembicaraan berlebihan dan semua ... ini berlaku untuk semuanya bukan hanya lajang.
Akhir-akhir ini ada semacam revolusi melawan lajang, tetapi apakah ada yang salah dengan mereka jika mereka tidak memiliki kewarganegaraan?
Saya tahu pembicaraan berlebihan dan semua ... ini berlaku untuk semuanya bukan hanya lajang.
Jawaban:
> Are immutable/stateless singletons bad?
Untuk lebih jelasnya lihat arsitektur bawang
Saya tidak melihat alasan lain mengapa tidak menggunakan lajang.
Itu selalu tergantung pada penggunaan. Saya pikir revolusi berasal dari fakta, bahwa setiap programmer belajar pola ini sebagai yang pola berorientasi objek. Kebanyakan lupa untuk memikirkan di mana itu masuk akal dan di mana tidak.
Ini, tentu saja, berlaku untuk setiap pola. Hanya dengan menggunakan pola Anda tidak membuat kode yang baik atau perangkat lunak yang baik.
Jika Anda memiliki singleton stateless, mengapa tidak menggunakan kelas yang hanya menawarkan metode statis (atau menggunakan kelas statis)?
Berikut beberapa postingan mengenai variabel global dan lajang secara umum.
Saya tidak akan seketat penulisnya, tetapi ia menunjukkan bahwa untuk sebagian besar kasus di mana Anda pikir Anda membutuhkan seorang wanita lajang, Anda tidak benar-benar membutuhkannya.
Tidak ada yang bisa dilakukan oleh singleton stateless yang abadi yang tidak bisa dilakukan oleh kelas statis.
Tidak ada alasan untuk menambahkan tingkat kompleksitas tambahan yang -> Instance () ciptakan, sementara panggilan biasa ke metode statis akan lebih jelas, lebih konservatif dalam hal sumber daya dan mungkin lebih cepat.
Bukannya mereka salah. Itu ada cara yang lebih baik untuk melakukannya. Ada skenario di mana lajang normal ("stateful") adalah cara yang tepat untuk pergi. Kejahatan dengan singleton adalah bahwa mereka sering disalahgunakan, dengan hasil buruk yang sama dengan variabel global, tetapi ada kasus khusus di mana menggunakan singleton benar. Tidak ada kasus seperti itu untuk yang kewarganegaraan.
Masalah utama dengan singleton adalah bahwa ia menyembunyikan ketergantungan dan penggandaan secara khusus ketika digunakan dalam skenario keprihatinan lintas sektoral. Lihat Lajang adalah Pendusta Patologis atau Mengapa Lajang Jahat untuk bacaan lebih lanjut.
Dari sisi lain, negara yang kurang lajang, jika tidak dilecehkan, dapat membantu dan meningkatkan kinerja. Pertimbangkan sebuah contoh:
interface Interface
{
void Method();
}
class StatelessSingleton : Interface
{
public static readonly StatelessSingleton Instance = new StatelessSingleton();
private StatelessSingleton() { }
public void Method() { }
}
class User
{
public User(Interface i) { /* ... */ }
}
Di sini, StatelessSingleton bertindak sebagai implementasi standar Antarmuka dan dimasukkan ke dalam konstruktor Pengguna. Tidak ada kopling hard-coded dan dependensi tersembunyi. Kami tidak dapat menggunakan kelas statis karena antarmuka yang mendasarinya tetapi tidak ada alasan untuk membuat lebih dari satu instance dari default. Itulah mengapa singleton yang tidak memiliki kewarganegaraan tampaknya menjadi pilihan yang tepat.
Namun, mungkin kita harus menggunakan pola lain untuk implementasi default:
class Implementation : Interface
{
private readonly Action _method;
public Implementation()
{
_method = new Action(() => { /* default */ });
}
public Implementation(Action custom)
{
_method = custom;
}
public void Method()
{
_method();
}
}
Itu hits kinerja sehubungan dengan StatelessSingleton tetapi merupakan implementasi generik dari Antarmuka. Solusi serupa digunakan oleh antarmuka IProgress .
Meskipun lagi, mengapa memungkinkan untuk membuat lebih dari satu implementasi perilaku default? Namun kita dapat menggabungkan keduanya:
class Implementation : Interface
{
public readonly Implementation Default = new Implementation();
private readonly Action _method;
private Implementation()
{
_method = new Action(() => { /* default */ });
}
public Implementation(Action custom)
{
_method = custom;
}
public void Method()
{
_method();
}
}
Sebagai kesimpulan, saya percaya bahwa ada tempat (seperti yang digambarkan sebagai default) di mana Singletons berguna. Definisi utama Singleton menyatakan bahwa ia tidak diperbolehkan membuat lebih dari satu instance kelas. Ini seperti tenaga nuklir. Dapat menghasilkan energi atau bom. Itu tergantung pada manusia.