"Manager"-Design

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Welcher Vorteil wäre denn hier ein Singleton ? Wenn er sich das durchreichen des Pools an die Controller wirklich sparen will, dann kann er doch genauso gut den Pool im Appdelegate erzeugen und mit dem Appdelegate von überall drauf zugreifen. Einen Vorteil eines Singletons sehe ich wirklich nicht.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • gritsch schrieb:

    dann musst du ihn dort aber erstellen. natürlich threadsave.
    einen singleton kann ich aus einem projekt rauskopieren und ins nächste rein und die sache ist fertig ;)


    Komisch, dass kann ich mit jeder von mir erstellen Klasse auch. Und dann rufe ich einen Initializer auf und fertgi ist.

    Mein großes Problem mit Singletons ist, dass man schnell vergisst das sie eben nicht Threadsafe sind. Und versuch mal einen Fehler zu finden der durch fehlerhafte Reintranz verursacht wird. Da hilft Dir kein Debugger der Welt, weil der Fehler nämlich vom timing abhängt und garantiert nicht mehr auftritt wenn man einen Breakpunkt oder auch nur einen log einbaut.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    gritsch schrieb:

    dann musst du ihn dort aber erstellen. natürlich threadsave.
    einen singleton kann ich aus einem projekt rauskopieren und ins nächste rein und die sache ist fertig ;)


    Komisch, dass kann ich mit jeder von mir erstellen Klasse auch. Und dann rufe ich einen Initializer auf und fertgi ist.

    Mein großes Problem mit Singletons ist, dass man schnell vergisst das sie eben nicht Threadsafe sind. Und versuch mal einen Fehler zu finden der durch fehlerhafte Reintranz verursacht wird. Da hilft Dir kein Debugger der Welt, weil der Fehler nämlich vom timing abhängt und garantiert nicht mehr auftritt wenn man einen Breakpunkt oder auch nur einen log einbaut.

    Gruß

    Claus


    Singletons sind gleich viel/wenig threadsave wie dein controller.
  • Es besteht keinerlei Notwendigkeit, "über 5 controller [zu] hangeln". Wenn Dich das Weiterreichen stört, erzeuge einfach eine weitere Instanz von ConnectionPool.
    Das hat gleich mehrere Vorteile, u.U. benötigen unterschiedliche Programmteile leicht unterschiedliches Verhalten (z.B. bei der credential-Verwaltung, dem timeout, threading der Connections etc.), das könnte man in ConnectionPool parametrisierbar machen. Jede dieser ConnectionPool-Instanzen hat dann ein etwas unterschiedliches Verhalten. Somit ist die Wiederverwendbarkeit viel besser als mit einem Singleton, in welchem Du alle möglichen Anwendungsfälle fest verdrahten müsstest. Ein weiterer Grund, der gegen die Verwendung des Singleton(anti-)Patterns spricht.

    Noch was zur Threadsicherheit: wenn es schon ein Singleton sein muss, am besten mit GCD umsetzen: developer.apple.com/library/ma…man3/dispatch_once.3.html
  • Markus Müller schrieb:

    Es besteht keinerlei Notwendigkeit, "über 5 controller [zu] hangeln". Wenn Dich das Weiterreichen stört, erzeuge einfach eine weitere Instanz von ConnectionPool.
    Das hat gleich mehrere Vorteile, u.U. benötigen unterschiedliche Programmteile leicht unterschiedliches Verhalten (z.B. bei der credential-Verwaltung, dem timeout, threading der Connections etc.), das könnte man in ConnectionPool parametrisierbar machen. Jede dieser ConnectionPool-Instanzen hat dann ein etwas unterschiedliches Verhalten. Somit ist die Wiederverwendbarkeit viel besser als mit einem Singleton, in welchem Du alle möglichen Anwendungsfälle fest verdrahten müsstest. Ein weiterer Grund, der gegen die Verwendung des Singleton(anti-)Patterns spricht.

    Noch was zur Threadsicherheit: wenn es schon ein Singleton sein muss, am besten mit GCD umsetzen: developer.apple.com/library/ma…man3/dispatch_once.3.html


    das hat im connection-pool aber nichts verloren!