Wenn ich das folgende Rubin Modul haben, die eine bestimmte Schnittstelle implementiert (apply
in diesem Fall)Ist diese Verwendung von Polymorphismus irreführend und daher schlechtes Design?
module FooApplier
def apply
foo
end
end
... und alle anderen „Anwender“ sind Klassen, keine Module, ist es irreführend zu anderen Ingenieuren weitergeben FooApplier
an Empfänger, die die apply
Schnittstelle erwarten?
Nehmen wir an, die Anwendung mit FooApplier
läuft völlig in Ordnung, aber nehmen wir auch an, dass ein anderer Ingenieur sich nicht die Zeit genommen hat, über jedes letzte Byte meines Codes zu strömen. Wenn sie beschließen, etwas wie .new
an die FooApplier
zu senden, die irgendwie einen subtilen Fehler verursacht, ist die Last auf meinem Entwurf, oder der Ingenieur, um Annahmen zu treffen und zu vernachlässigen, meinen Code zu lesen?