Anda harus memiliki satu set antarmuka yang sangat terdefinisi dengan baik yang diizinkan untuk mengirim atau menerima pesan - memberi mereka referensi ke Penjadwal Acara harus sepele. Jika tidak, atau jika Anda merasa seperti itu akan melibatkan melewati penjadwal acara ke jenis "terlalu banyak" yang berbeda, maka Anda mungkin memiliki masalah desain yang lebih besar di tangan Anda (ketergantungan bebas, yang cenderung diperburuk oleh para lajang, tidak memecahkan ).
Ingat bahwa sementara teknik meneruskan penjadwal ke antarmuka yang membutuhkannya adalah bentuk " injeksi ketergantungan ," Anda tidak dalam hal ini menyuntikkan ketergantungan baru . Ini adalah dependensi yang sudah Anda miliki dalam sistem, tetapi Anda sekarang membuatnya menjadi eksplisit (versus ketergantungan implisit singleton). Sebagai aturan praktis, dependensi eksplisit lebih disukai karena mereka lebih mendokumentasikan diri.
Anda juga memberi diri Anda lebih banyak fleksibilitas dengan memisahkan para konsumen dari penjadwalan acara dari satu sama lain (karena mereka tidak semuanya terikat dengan penjadwal yang sama), yang dapat berguna untuk menguji atau mensimulasikan pengaturan klien / server lokal atau sejumlah opsi lainnya. - Anda mungkin tidak memerlukan opsi lain ini, tetapi Anda belum mengeluarkan upaya untuk secara artifisial membatasi diri dari mereka, yang merupakan nilai tambah.
EDIT: Yang saya maksud ketika saya berbicara tentang melewati penjadwal sekitar adalah ini: jika Anda memiliki beberapa komponen permainan yang bertanggung jawab untuk menanggapi tabrakan, itu mungkin dibuat melalui beberapa pabrik responden tabrakan yang merupakan bagian dari lapisan fisika Anda. Jika Anda membangun pabrik dengan instance penjadwal, maka pabrik tersebut dapat meneruskan instance tersebut ke semua responden yang dibuatnya, yang kemudian dapat menggunakannya untuk meningkatkan acara (atau mungkin berlangganan ke acara lain).
class CollisionResponderFactory {
public CollisionResponderFactory (EventScheduler scheduler) {
this.scheduler = scheduler;
}
CollisionResponder CreateResponder() {
return new CollisionResponder(scheduler);
}
EventScheduler scheduler;
}
class CollisionResponder {
public CollisionResponder (EventScheduler scheduler) {
this.scheduler = scheduler;
}
public void OnCollision(GameObject a, GameObject b) {
if(a.IsBullet) {
scheduler.RaiseEvent(E_BIG_EXPLOSION);
}
}
EventScheduler scheduler;
}
Ini jelas merupakan contoh yang sangat dibuat-buat dan disederhanakan karena saya tidak tahu apa model objek game Anda; Namun itu menggambarkan membuat ketergantungan pada penjadwal acara eksplisit dan menunjukkan beberapa potensi untuk enkapsulasi lebih lanjut (Anda tidak perlu melewati penjawab penjadwal jika mereka berkomunikasi melalui sistem respons tabrakan tingkat yang lebih tinggi pada tingkat konseptual yang sama dengan pabrik yang berurusan dengan mur dan baut acara peningkatan melalui penjadwal. Ini akan mengisolasi setiap responden individu implementasi dari rincian implementasi sistem pengiriman acara, seperti acara tertentu untuk meningkatkan tabrakan, yang mungkin ideal untuk sistem Anda - - atau tidak).