Ich habe hier ein Dilemma darüber, was ist und was kein Zirkelbezug ist ... und wie man es im affirmativen Fall los wird.OOP-Zirkelreferenz
Sagen wir, ich habe eine Main
Klasse, die zwei verschiedene Klassen instanziiert wo jede dieser Klassen müssen ein Verfahren, in dem anderen auszuführen:
MyMain {
AlarmManager alarmManager;
DatabaseManager databaseManager;
MyMain() {
alarmManager = new AlarmManager(dataBaseManager);
databaseManager = new DatabaseManager (alarmManager);
}
AlarmManager getAlarmManager() {
return alarmManager;
}
DatabaseManager getDatabasetManager() {
return databaseManager;
}
}
Und die Klassen:
AlarmManager {
DatabaseManager dataBaseManager;
onAlarm(alarm) {
dataBaseManager.saveInHistorical(alarm);
sendAlarm(alarm);
}
sendAlarm(alarm) {
socketWriter(alarm);
}
}
DatabaseManager{
AlarmManager alarmManager;
onDatabaseConnectionError() {
saveInHistorical(databaseAlarm);
alarmManager.sendAlarm(databaseAlarm);
}
saveInHistorical(historical) {
connection.store(historical);
}
}
Ich nehme an Sie erhalten die Idee, indem Sie sich den Code ansehen. Wenn es einen Alarm gibt, erhalten wir ihn im AlarmManager, aber er muss ihn in der historischen Datenbank speichern. Wenn jedoch ein Verbindungsfehler mit der historischen Datenbank vorliegt, müssen wir auch einen Alarm senden.
Ist dies wirklich eine zirkuläre Referenz, wo Haupt Alarm hat aber Alarm hat auch Haupt-und das gleiche für Datenbank/Haupt? Wie würdest du es lösen?
Es sieht wie ein Designfehler aus, können Sie die Klassen näher erläutern und was sie tun sollen? Vielleicht können wir uns ein anderes Design ausdenken –
Wie löst man Ehe OO? Ich liebe die Frage! Ich bin sicher, dass es viele (akademische) Lösungen gibt, aber ich hätte (pragmatisch) eine Basisklasse für Ereignis und Alarm. – halfbit
@BartlomiejLewandowski "Designfehler" oder Knoten im Gehirn, Sie haben Recht mit "es gibt ein Bedürfnis, ein paar Schritte zurück zu gehen", denke ich – halfbit