Aktionen
Fehler #634
geschlossenreinstantiated()-Methode für Entity
Beginn:
29.12.2016
Abgabedatum:
% erledigt:
0%
Geschätzter Aufwand:
0:06 h
Beschreibung
Wenn man ->find nach einer Basisklasse macht, erhält man vom em nicht die vollen Informationen der abgeleiteten Klasse.
Hierfür wird man im Allgemeinen einen switch nachschalten müssen, der die Entities mit ihren abgeleiteten Klassen reinstantiiert. Innerhalb eines switches führt das aber zu unschönen Scope-Konstrukten:
case Enums::AppType::ATTENDANCE:
{
auto attendanceData = em->findById<AppAttendanceData>(this->getId(),true);
result = attendanceData;
}
break;
Schöner ist ein Template, das an dieser Stelle den switch vereinfacht:
template <class T> QSharedPointer<T> reinstantiated() {
return EntityManager::getDefaultInstance()->findById<T>(this->getId(),true);
}
Damit sähe der switch so aus:
case Enums::AppType::ATTENDANCE:
result = this->reinstantiated<AppAttendanceData>();
break;
Aktionen
#1
Von Sebastian Diel vor fast 8 Jahren aktualisiert
Verbesserungsvorschlag:
template <class T> QSharedPointer<T> reinstantiated(EntityManager* instance = nullptr) {
if (!instance) {
instance = EntityManager::getDefaultInstance();
}
return instance->findById<T>(this->getId(),true);
}
Aktionen
#2
Von Christian Ehringfeld vor mehr als 6 Jahren aktualisiert
- Status wurde von Neu zu Abgewiesen geändert
Das wäre die einzige Methode in der Entityklasse, welche direkt auf den EM zugreifen würde. Der "Gewinn" hält sich eher in Grenzen...
Aktionen