Protokollorientierte Programmierung

8

Wenn wir unsere Gehirne von Object Oriented Programming auf Protocol Oriented Programming umstellen, wie kann ich Folgendes tun?

Nehmen wir an, ich habe ein JSON -Objekt, das Model darstellt, {created_time, updated_time, type, ...} und diese Werte sind in 5 Model-Objekten üblich.

ist es richtig zu machen, dass ein Protokoll alle obigen Eigenschaften wie die folgenden enthält

%Vor%

und dann stimmen alle 5 Strukturen mit diesem Protokoll überein

    
Bobj-C 11.08.2015, 13:55
quelle

2 Antworten

7

Ich würde sagen, das ist eine vollkommen gute Lösung. Die Alternative wäre, eine Basisklasse mit diesen Eigenschaften zu haben und alle fünf dieser Modelle von der Basisklasse zu erben, aber es gibt keinen besonderen Grund, die Vererbung hier zu verwenden.

Ein Protokoll ist nur ein "Vertrag", der garantiert, dass eine Klasse bestimmte Eigenschaften oder Verhaltensweisen hat. Für mich fühlt sich Ihr Beispiel hier sehr "vertraglich" an.

Im Gegensatz dazu impliziert Vererbung eine "ist-a" -Beziehung (z. B. ein Ford ist ein Auto). Für mich fühlt sich das eher wie ein Vertrag als ein "ist-a" -Fall an. Natürlich ist keine der beiden Möglichkeiten falsch, aber denke, dass deine Protokollidee hier gut ist.

    
ezig 11.08.2015 14:00
quelle
1

Apropos protokollorientierte Programmierung Swift 2 verfügt über Protokollerweiterungen, die Standardimplementierungen erlauben. Dies ersetzt auch viele Fälle, in denen Sie stattdessen eine Superklasse verwenden würden.

In diesem Fall:

%Vor%

Wenn alle Eigenschaften und Methoden eine Standardimplementierung durch die Protokollerweiterung haben, müssen Sie selbst keine angeben. Sie können sie jedoch nur "überschreiben", indem Sie sie implementieren.

Sie haben also die richtige Entscheidung und sollten Protokolle so oft wie möglich verwenden.

Der einzige große Nachteil ist, dass es keine super gibt, wo Sie die Standardimplementierungen explizit aufrufen können. Ein Workaround (siehe Antwort ) würde eine Superklasse erfordern, die das Protokoll fast überflüssig macht.

    
Qbyte 11.08.2015 17:56
quelle

Tags und Links