Projekt

Allgemein

Profil

Aktionen

Fehler #634

geschlossen

reinstantiated()-Methode für Entity

Von Sebastian Diel vor mehr als 7 Jahren hinzugefügt. Vor fast 6 Jahren aktualisiert.

Status:
Abgewiesen
Priorität:
Niedrig
Zugewiesen an:
Zielversion:
-
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 mehr als 7 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 fast 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

Auch abrufbar als: Atom PDF