12

私は Perl プロジェクトで DbC を使用して調査しており、ソース内のコントラクトを検証する最良の方法を見つけようとしています (たとえば、事前/事後条件、不変条件のチェックなど)。

Class::Contractは Damian Conway によって書かれ、現在は C. Garret Goebel によって保守されていますが、8 年以上触れられていないようです。

私が使いたいのはMooseのようですが、DbC に使用できる機能を提供するように思われますが、これについてのリソース (記事など) を誰かが持っているかどうか疑問に思っていました。私が見つけられなかった有用なモジュールがそこにある場合。

PerlでDbCをやっている人はいますか? Mooseに「飛び込んで」、Mooseに何ができるか見てみるべきですか?

4

4 に答える 4

10

Mooseは、DbCを実行するための多くのツール(すべてではないにしても)を提供します。具体的には、メソッドフックの前、後、および周囲(ここに いくつかの例)を使用して、引数と戻り値に対して行う可能性のあるアサーションを実行できます。

「独自のDbCをロールする」代わりに、MooseX :: Method::SignaturesMooseX::Methodなどのモジュールを使用して、サブルーチンに渡されるパラメーターの検証を行うことができます。ただし、これらのモジュールは、DbCが通常提供する「事後」または「不変」の検証を処理しません。

編集:この質問に動機付けられて、私はMooseX :: Contractを一緒にハックして、CPANにアップロードしました。DbCを直接使用したことがないので、APIに関するフィードバックを受け取りたいと思います。

于 2009-01-14T16:27:49.157 に答える
2

Mooseの使用もお勧めします。

ただし、「代替」としてSub::Contractを見てください。

著者を引用するには....

Sub::Contract は、Perl のコントラクト パラダイムによってプログラミングの一部を実装する実用的な方法を提供します。

Sub::Contract は、契約による設計のフレームワークではありません。

Sub::Contract は、実行時に強力な型付けをエミュレートするために、サブルーチンの入力引数と戻り値を制約することを非常に簡単にすることを目的としています。

于 2009-01-14T20:16:46.243 に答える
2

Moose は perl の優れた oo システムであり、perl でオブジェクトをコーディングするすべての人に心からお勧めします。アクセサーまたはコンストラクターによって設定されたときに適用されるクラス メンバーの「サブタイプ」を指定できます (同じシステムを関数の Moose::Methods パッケージで使用できます)。複数のライナーをコーディングする場合は、Moose を使用してください。

DbC の実行に関しては、まあ、perl5 には最適ではないかもしれません。保証がほとんどない言語では難しいでしょう。個人的には、多くの動的言語、特に perl では、指針となる哲学を DRY にし、テスト駆動開発にする傾向があります。

于 2009-01-14T04:28:32.507 に答える
1

クラスの不変条件が必要ない場合は、次の Perl Hacks 本の推奨事項がいくつかのプログラムに適した解決策であることがわかりました。を参照してくださいSmart::Comments

于 2010-06-25T19:14:00.420 に答える