問題タブ [design-by-contract]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
orm - DDD: リポジトリ コントラクト
私はさまざまな場所で、DDD の重要な要件の 1 つは、リポジトリの制限されたコントラクトを持つことであると読みました。
また、一般的なクエリ インターフェイスを提供しない:
これが重要である理由は理解できます。テスト用にリポジトリをモックしたり、基礎となる永続化フレームワークを変更したりできるためです。
このルールをアプリケーション全体に適用するのはそれほど難しくありませんが、ユーザーに「高度な検索」フォームを提供する場合に適用する方法がわかりません。
ブログ投稿をキーワード、日付、作成者などで検索できるフォームがあるとします。
これらの基準は自由に組み合わせることができるため、ユースケースごとに方法を提供することはできません。
何かが足りないのでしょうか、それとも規則の例外の 1 つですか?
java - Cofoja を Wicket で (または Maven だけで) 使用する
標準のように Maven2 を使用するApache WicketアプリケーションでGoogle Cofoja を実行するために、私は最善を尽くしています。
このプロジェクトは、当初、アーキタイプ「Wicket 1.4.12、Guice 2.0、WarpPersist 2.0 (スナップショット)、Hibernate 3.5.6」が選択されたLeg Upを使用して生成されました。
私が最近試した (そして最も動作に近いように思われる) のは、maven (コントラクト クラスをビルドすることができた) を使用してビルドし、ant を使用してプロジェクトを実行して、コントラクト チェックを取得しようとすることです。起こる。最新の問題は、何をメインクラスにすればよいかわからないことです。jetty サーバーを実行するクラスにしようとしましたが、class not found 例外が発生します。
同様に、このソリューションが機能したとしても、コントラクト チェックを maven build の一部として実行するという理想的なソリューションにはほど遠いものです。
今、私が現在持っているもの:
pom.xml
build.xml
maven-build.properties
com/mycompany/myproject/adminconsole/Start.java
あなたが私の現在のアリの問題を解決する方法を知っているなら、またはさらに良いことに、アリのハックをすべて一緒に廃棄する方法のアイデアを持っているなら、それは非常にエキサイティングです (:
更新 1
悪いので、コードから 's を削除-
しました (@Martijn Dashorst に感謝)。残念ながら、これで問題は解決しませんでした。
objective-c - プロジェクトで「assert」を使用するのはなぜですか?(そしてなぜそれを何度も使うのか)
私はサンプルコードListAdderを読んでいましたが、変数の直後に多くのアサートがあり、ほとんどすべてのメソッドで使用されています。たとえば、次のようになります。
self.formatter = [[[NSNumberFormatter alloc] init] autorelease];
assert(self.formatter != nil);
また :
私は疑問に思っていました、それをするためのポイントは何ですか?
ありがとう
c# - switch ステートメントの処理
次のケースを処理するための推奨される方法は何ですか:
使用済みの契約numberOfActualBytes
により、範囲内であることは確かです。1-4
not all code paths return a value
エラーにならないコードはどう書けばいいですか?
この関数の最後または で例外をスローする必要があると思いますdefault switch case
が、おそらくもっと良い解決策があります。
c# - 契約。使用が必要
これが私の問題です。私は契約による設計の大ファンです。特に他の開発者が使用できるライブラリを開発するときに、この概念を使用しています。私はこれを行うための新しい方法を見つけました。それは:Contract.Requires
の代わりにException
:だから:の代わりに:
私は今持っています:
編集:私はデバッグモードでVS2010の下で働いています。
問題:ある場合でもContract.Requires
、何もしません!name
null
MSDNのドキュメントには次のように書かれています。
囲んでいるメソッドまたはプロパティの前提条件コントラクトを指定します。
ただし、条件が満たされない場合は何も指定されません。
また、例外をスローし、メッセージを表示する他の オーバーロードがあることに気づきました...しかし、それでは何のためにあるのでしょうか?Contract.Requires
Contract.Requires(Boolean)
以下の回答を編集して、APIのフルパワーを得るにはプラグインをインストールする必要があることを強調しましたが、Contract
異なるプラットフォームでコードを同じように動作させたいMonoユーザーはどうでしょうか?
java - クラスで開発者が間違ったことをするのを制限する必要がありますか?
私は、良い契約がどこで終わり、パラノイアが始まるのかを理解しようとしています. 本当に、私は良い開発者が何を気にかけ、何を省くべきなのかまったくわかりません:)
java.lang.Integer のような値を保持するクラスがあるとします。そのインスタンスは、他のオブジェクト (MappedObjects) (1 対多または多対多) によって集約され、MappedObjects のメソッド内でよく使用されます。パフォーマンス上の理由から、これらの関係を TreeMap (guava MultiMap は関係ありません) で追跡し、整数キーの範囲にバインドされた MappedObjects を高速に反復できるようにします。したがって、システムを一貫した状態に保つには、MappedObject.bind(Integer integer) メソッドを変更して、次のように Map を更新する必要があります。
この最終メソッドを使用して抽象 MappedObject クラスを作成し、他のメソッドを強制的に継承させることもできますが、それは失礼です。メソッド bind() を使用して MappedObject をインターフェイスとして定義し、スケルトン実装を提供する場合、他の開発者は後でそれをオブジェクトに含め、Map を更新せずに自分でメソッドを実装するのを忘れる可能性があります。
computer-science - このステートメントはクラス不変条件と見なすことができますか?
これは非常に一般的な考えですが、この例では C# を使用しましょう。
とすれば
- 私は使い捨てクラスを持って
Foo
います。つまり、実装していますIDisposable
。 Foo
が呼び出されるまでfalseであるブールフラグdisposed
を持ち、その後はtrueになります。Dispose
Foo
throwsのすべての public メソッドは、呼び出されたときにtrueのObjectDisposedException
場合。disposed
この発言は
Foo
を除くのすべてのメソッドは、破棄された のインスタンスで呼び出されたときにDispose
をスローします。ObjectDisposedException
Foo
の不変量をFoo
記述する
python - Python でのコントラクトによる設計の使用
私は職場で多数の Python ベースのプロジェクトで DBC の使用を開始しようとしていますが、他の人が DBC でどのような経験をしたのか知りたいと思っています。これまでのところ、私の調査では次のことがわかりました。
- http://www.python.org/dev/peps/pep-0316/ - 延期された Python の契約による設計を標準化することになっている PEP 316。この PEP は、docstring の使用を提案しています。
- http://www.wayforward.net/pycontract/ - Python のコントラクト。これは、docstring を使用した完全なフレームワークですが、メンテナンスされていないようです。
- http://www.nongnu.org/pydbc/ - メタクラスを使用してコントラクトを実装する PyDBC。また、数年間メンテナンスされていません。
私の質問は、Python で DBC を成熟した製品コードに使用したことがありますか? どれくらいうまくいきましたか/努力する価値がありましたか? どのツールをお勧めしますか?
design-by-contract - RESTful Web サービスを使用したコントラクトによるコーディング方法
当社では、ベスト プラクティスとして、Contract-First アプローチを使用して Web サービスを作成しています。
WSDL は、実装が検討される前に定義されます。
RESTを使用してそのようなアプローチを使用することは可能ですか? XSD を使用することを考えていましたが、呼び出しは通常 XML ではありません。では、機械が解釈できる方法でコントラクトを指定するにはどうすればよいでしょうか。
java - 契約による設計では、どのような前提条件が適切ですか?
Student
次のコンストラクターを持つクラスがあると仮定します。
間違っている場合は訂正してください。ただし、この例では、可能な入力値に(かなり静的な)制約を指定し、それらが満たされない場合は一般的な未チェックの例外を発生させることで、契約パラダイムによる設計に従いました。
現在、入学番号で索引付けされた学生のリストを管理するバックエンドクラスがあります。このマッピングを保存するためのを保持し、次のメソッドMap<Integer, Student>
を介してアクセスを提供します。addStudent
ここで、この方法に「同じ入学番号の学生がデータベースにすでに存在していてはならない」などの制約があると仮定します。
これを実現する方法には2つの選択肢があります。
オプションA
同じ母校の生徒UniquenessException
が育てたカスタムクラスを定義します。addStudent
番号はすでに存在します。呼び出しコードは次のようになります。
オプションB
要件を前提条件として記述しIAE
、それが成り立たない場合は単にを上げます。さらに、失敗するcanAddStudent(Student stud)
かどうかを事前にチェックする方法を提供します。addStudent
コードを呼び出すと、次のようになります。
オプションAは、少なくとも次の理由から、ソフトウェアエンジニアリングの観点からははるかにクリーンだと思います。
- 呼び出し元のコードを変更せずに、簡単にスレッドセーフにすることができます(正確な問題を説明しているように見えるTOCTTOUを教えてくれたVooに感謝します)
したがって、私は疑問に思います:
- さらに優れた3番目のオプションはありますか?
- オプションBには、私が思いもよらなかった利点がありますか?
- 契約の観点からの設計から、オプションBを使用し、
addStudent
メソッドの前提条件として一意性を定義することは実際に許可されますか? IAE
前提条件を定義して単純に発生させる場合と、「適切な」例外を使用する場合の経験則はありますか?「システムの現状に依存しない限り、前提条件にする」というのもそういうルールかもしれないと思います。より良いものはありますか?
更新:別の良いオプションがあるようです。それはpublic boolean tryAddStudent(...)
、例外をスローせず、代わりに戻り値を使用してエラー/失敗を通知するメソッドを提供することです。