Frage

Ich unter DBC in unseren Perl-Projekten verwenden, und ich versuche, den besten Weg zu finden, Verträge in der Quelle zu überprüfen (z Überprüfung Pre / Post-Bedingungen, Invarianten, etc.)

Class :: Vertrag wurde von Damian Conway geschrieben und wird nun von C. Garret Goebel gehalten wird, aber es sieht aus wie es war nicht in mehr als 8 Jahren berührt.

Es sieht aus wie das, was ich verwenden möchte, ist Moose , wie es scheint, als ob es bieten könnte Funktionalität, die für DBC verwendet werden könnte, aber ich habe mich gefragt, ob jemand irgendwelche Ressourcen hatte (Artikel, etc.), wie um dies zu realisieren, oder wenn es keine hilfreiche Module gibt, die ich nicht finden konnte zu.

Ist jemand tun DBC mit Perl? Sollte ich „Sprung in“ Moose nur und zu sehen, was ich kann es für mich zu tun bekommen?

War es hilfreich?

Lösung

Moose gibt Ihnen eine Menge der Werkzeuge (wenn nicht sogar alle der Zucker) DBC zu tun. Insbesondere können Sie die vor dem Gebrauch, nach und um Verfahrenshaken ( hier ist einige Beispiele ) auszuführen, was Behauptungen, die Sie auf Argumente machen möchten und Werte zurückgeben.

Als Alternative zu "Ihre eigenen DbC rollen" Sie ein Modul wie :: Methode :: Signatures oder MooseX :: Methode kümmern zu einem Unterprogramm übergebenen Parameter zu validieren. Diese Module nicht behandelt das „Post“ oder „unveränderlich“ Validierungen, die DBC typischerweise sieht jedoch vor.

EDIT: mit dieser Frage Motivierte, habe ich gehackt zusammen MooseX :: Vertrag und lud es auf den CPAN. Ich würde neugierig sein Feedback über die API zu bekommen, wie ich habe nie wirklich DBC aus erster Hand verwendet wird.

Andere Tipps

Moose sind ein ausgezeichnetes oo System für Perl, und ich kann es von ganzem Herzen empfehlen für alle Objekte in Perl-Codierung. Sie können „Subtypen“ für Ihre Klassenmitglieder angeben, die erzwungen werden, wenn sie von Accessoren oder Konstrukteuren gesetzt (das gleiche System kann mit dem Moose :: Methoden Paket für Funktionen verwendet werden). Wenn Sie mehr als ein Liner codieren, verwenden Moose;

Wie bei DBC tun, na ja, vielleicht nicht die beste Lösung für perl5 sein. Es wird in einer Sprache zu schwer sein, dass Sie nur sehr wenige Garantien bietet. Persönlich in vielen dynamischen Sprachen, vor allem aber Perl, ich neige dazu, meinen Leitidee DRY und testgetriebene Entwicklung zu machen.

Ich würde auch empfehlen Moose verwenden.

Jedoch als "Alternative" zu sehen Sub :: Vertrag .

, um den Autor zu zitieren ....

  

Unter :: Vertrag bietet eine pragmatische Art und Weise Teile der Programmierung durch Vertrag Paradigma in Perl zu implementieren.

     

Unter :: Vertrag ist kein Design-by-Contract-Framework.

     

Unter :: Vertrag zielt darauf ab, so dass es sehr leicht Subroutinen Eingabeargumente zu beschränken und Rückgabewerte, um die starke Typisierung zur Laufzeit zu emulieren.

Wenn Sie nicht brauchen, Klasseninvarianten, habe ich folgende Perl Hacks Buchempfehlung gefunden für einige Programme eine gute Lösung zu sein. Siehe Smart::Comments .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top