2017-07-12 6 views
0

Die Verbesserung der Verwendung von Rollen (Moo :: Rolle oder Rollen :: Tiny oder was auch immer)Rollen und die Lesbarkeit des Codes

with qw(
    Some::Role 
    Some::Other::Role 
); 
... 
some_roles_method(); 

über nur die Funktion aus der mixin Klasse explizit importieren

use Some::Role qw/some_roles_method/; 
... 
some_roles_method(); 

sind zahlreiche, und fügen hinzu, Flexibilität, weniger Buchhaltung (vor allem, wenn viele Methoden importiert werden), und nicht bestehende Methoden zu überschreiben.

Aber ein großer Nachteil ist, wenn Sie den Code lesen und Erwähnungen von some_roles_method() kommen und Sie die Funktion lesen möchten, ist es nicht sofort ersichtlich, wohin zu gehen. Alles, was Sie sagen können, ist, dass es nicht in dieser Datei definiert ist.

Gibt es irgendwelche guten Strategien, um das zu handhaben? Bin ich der Einzige, der stört?

+2

Das ist nicht die einzige Rolle der Rolle ist (kein Wortspiel beabsichtigt). Zum Beispiel, [ 'requires'] (https://www.nu42.com/2010/07/beauty-of-moose-enforcing -interface.html) kann nützlich sein. Wenn Sie sich nicht für den Zucker entscheiden, den diese Module bieten, ist SO nicht der Ort, um darüber zu debattieren. –

+1

Gegeben, wie es heißt, der einzige Ort zu gehen ist das Paket (Klasse). Dann suchen Sie nach 'with' und sehen den Paketnamen der Rolle. Es sollte kein großes Problem sein? – zdim

+2

Lassen Sie mich in Anbetracht Ihres Snippets dies nur für den Fall sagen - Rollen werden mit einer Klasse verwendet und werden von ihr absorbiert (siehe [diesen Beitrag] (https://stackoverflow.com/a/42465412/4653379) zum Beispiel). Dann sollte das Auffinden der Methode kein Problem sein. – zdim

Antwort

0

Das einzige, was mir einfällt und das ich hin und wieder mache, ist, alles gründlich mit POD zu dokumentieren. Aber natürlich erfordert das viel der Disziplin.

use Moo; 
with 'Role::Reader', 'Role::Writer'; 

# ... 

=head1 METHODS 

=head2 frobnicate 

Frobnicates the foo. 

=cut 

sub frobnicate { ... } 

=head2 write_cheque 

This method is documented in L<Role::Writer>. 

=head2 write_autograph 

This method is documented in L<Role::Writer>. 

=head2 read_mind 

This method is documented in L<Role::Reader>. 

=head2 read_book 

This method is documented in L<Role::Reader>. 

=cut 

1; 
+0

Gibt es Tools, um das Lokalisieren der "Quelle" einer Methode zu automatisieren? –

+0

@Ed. Kannst du genauer sein? Sprechen Sie über Introspektion auf einem Objekt, um zu sagen, welcher Methodencode aus welcher Datei und Zeile stammt? – simbabque

+0

Ich denke ja, oder zumindest aus welcher Klasse? –