Ich benutze das Kotlin Delegationsmuster, um mehrere Komponenten zu größeren Komponenten zu mischen und anzupassen. Das hat meinen Code beschleunigt, es einfacher zu lesen, modularer, konsistenter usw. gemacht. Alle guten Dinge. Eine Sache, mit der ich mich abmühen muss, ist ein gutes Muster, um meine Delegierten freizugeben. Die meisten von ihnen haben eine dispose()
Methode, die ich darauf zu achten, verwenden Rx
Abonnements abzumelden, Android Lader Cancelling, zur Aussetzung der Ausführung von Aufgaben usw. Derzeit mache ich Sachen wie:Kotlin automatischer Code, der Delegierungsmuster einruft
interface Disposable {
fun dispose()
}
interface A: Disposable {
}
interface B: Disposable {
}
class AImpl: A {
fun dispose(){}
}
class BImpl: B {
fun dispose(){}
}
class Foo(val a = AImpl(), val b = BImpl(): A by AImpl, B by BImpl {
override fun dispose() {
a.dispose()
b.dispose()
}
}
manuell auf allen delegierten Methoden aufrufen entsorgen fühlt sich etwas klobig an - gibt es in Kotlin einen eleganten Weg (über Polymorphismus, mehr Delegierung, etc.), um sicherzustellen, dass eine Klasse bestimmte Methoden von Delegierten automatisch aufruft - in diesem Fall sind es Aufreinigungsmethoden, aber die gleichen können auch angewendet werden jede Operation, die alle Delegierten ausführen müssen.
Hm Kotlin Formatierung nicht toller Stack-Überlauf. – Calin
Ja, ich habe dieses Muster zuvor in Java verwendet und es ist großartig in dieser Umgebung, wenn Sie sich nicht damit beschäftigen, eine statisch typisierte Architektur auszuarbeiten. Aber ich versuche das Kotlin-Delegationsmuster https://kotlinlang.org/docs/reference/delegation.html zu verwenden und es ist nicht möglich, fancy delegation-foo zu machen, wie man es mit Kaitlin-Eigenschaften macht (faule Instantiierung, beobachtbares Muster, etc.)). All diese Dinge erlauben es Ihnen, in die delegierten Objekte einzugreifen, aber wenn Sie Implementierungen von Interfaces delegieren, können Sie nichts davon tun (zumindest habe ich nicht herausgefunden, wie!). – mikesol