Ergebnis 1 bis 2 von 2

Thema: [veraltet] Manager

  1. #1
    Registered User
    Registriert seit
    May 2000
    Beiträge
    905
    Renommee
    10

    Manager

    Was soll ein Manager tun können.
    Er verwaltet Objekte:
    • Alle Objekte müssen sich beim Manager registrieren (nicht allein durch den Manager möglich)
    • Alle Objekte müssen wieder deregistriert werden
    • Zugriff auf alle Objekte (indexed oder linear ?)


    Sollte eine Möglichkeit des verwaltens bieten, das heisst eventuell den Zugriff auf die Objekte erleichtern ... weiss nicht inwiefern das möglich ist
    (weiss netmal was genau damit gemeint ist )

    Das ganze kässt sich Policy gesteuert entwerfen
    Folgende Sachen sind dabei festzulegen und in Policies aufzuteilen:
    • Typ der Objekte die er speichert
    • Singleton (welche Art von Singleton-> Loki)
    • Storage (Pointer oder SmartPointer oder handles)
    • vector oder liste (oder sogar map), wie werden die Klassen gespeichert
    • Threading (SingleThreading/MultiThreading)



    Typ:
    Der Typ stellt den Objekttyp dar, den der Manager managed.
    Es sollte eine Methode zur Registrierung geben ala RegisterObjekt(constTypeRef x);

    Singleton:
    Jeder Manager sollte ein Singleton sein. Die Art des Singletons wird hier festgelegt.
    Wie kann der Manager allerdings Singleton gemacht werden ?
    Innerhalb der Klasse ist es nicht möglich einen SingletonHolder-Typ zu definieren der ausserhalb der Klasse zu sehen ist !
    Beispiel

    Code:
    template <class T,
                   template <class>SingletonHolder
                  >
    class Manager
    {
    //typedef  SingletonHolder<T,die anderen Typen> SingletonType; // geht net
    };
    
    //client.cpp
    typedef Manager<Texture,SingletonHolder<Texture,CreateUsingNew> > TextureManager;
    
    SingletonHolder<TextureManager>::Instance()->bla();
    Daraus ergibt sich für mich die Konsequenz das das Singleton nicht als Policy in den Manager aufgenommen werden kann.
    Daher muss ein extra typedef in die cpp der jeder gemanagten Klasse eingeführt werden

    typedef Manager<Klasse, ....> > KlasseManager;

    Storage:
    Wie wird das Objekt intern gespeichert und wie greift man darauf zu
    Einige Möglichkeiten
    • indexed access
      ObjectPointer GetObjekt(int i);
    • iterative access
      ObjectIterator begin();
    • handle access (map)
      ??? (wie wird handle festgelegt etc..)




    Threading:
    hmm, diese Policy ist für MultiThreading und Singlethreading zuständig.
    (locken der Get und Set Methoden ...)
    Da die GetMethode durch vererbung in die Klasse eingeht ist Threading eine von Storage abhängige Policy.
    Storage muss die Methoden selber aufrufen
    Folgende statische-Methoden sind zu implementieren:
    - ??? keine Ahnung, hab noch nie mit gearbeitet ...





    Zusammenfassung:
    Ungefähr dürfte die Manager Klasse so aufgebaut sein:

    Code:
    template <class T,
                    template <class> Threading,
                    template <class> Storage>
    class Manager : public Storage<T,Threading>
    {
    };

    Tja, comments, Vorschläge, Fragen, Erweiterungen ???
    Ist noch einiges zu tun. Danach wird eine genaue Beschreibung als Doc abgefasst und für die Implementierung bereitgestellt.
    Hiermit möchte ich mich in aller Form für diesen Beitrag entschuldigen.
    Ich verspreche, es kommt nie wieder vor !


    Life Suckz !!!

  2. #2
    Registered User
    Registriert seit
    May 2000
    Beiträge
    905
    Renommee
    10
    OK, i hab mal nen simplen Versuch gestartet um das zu veranschaulichen ...
    Da ich leider von Multithreading keine Ahnung habe ist dies noch nicht implementiert.
    Falls irgendwer Ahnung von Multithreading haben sollte (du Sense ?) bitte melden ! Was muss man hier beachten und was sollte geschützt werden !

    Code:
    template<class T>
    class Indexed
    {
    public:
    	void Register(T* Object)
    	{
    		list.push_back(Object);
    	}
    	void UnRegister(T* Object)
    	{
    		std::vector<T*>::iterator i = std::find(list.begin(),list.end(),Object);
    		list.erase(i);
    	}
    
    	T* GetElementAt(int i)
    	{
    		return list[i];
    	}
    
    private:
    	std::vector<T*> list;
    
    };
    
    	template <class T,
    		    template <class> class Storage = Indexed
    	        >
    	class Manager : public Storage<T>
    	{
    	};
    Dies ist ein simpler Manager, beigelgt eine Beispiel Storage Klasse für index Zugriff.
    Hiermit möchte ich mich in aller Form für diesen Beitrag entschuldigen.
    Ich verspreche, es kommt nie wieder vor !


    Life Suckz !!!

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. [veraltet] Allgemeines Framework
    Von ChaosAngel im Forum FireFly-Engine
    Antworten: 1
    Letzter Beitrag: 20.01.2003, 21:38
  2. [veraltet] API Switch & andere Probleme
    Von DerSensemann im Forum FireFly-Engine
    Antworten: 43
    Letzter Beitrag: 16.01.2003, 14:38
  3. [veraltet] Data & Ressources
    Von ChaosAngel im Forum FireFly-Engine
    Antworten: 8
    Letzter Beitrag: 15.01.2003, 12:36
  4. sms-bomber (veraltet)
    Von killerrbirne_b im Forum (Mobile) Kommunikation
    Antworten: 36
    Letzter Beitrag: 29.04.2001, 01:57

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •