2009-07-23 3 views
1

あなたがいないプレゼンテーションまたは永続層で、ビジネスロジック層における入力の検証(検証)を持っています。現実にはどこにでも置くことができます(または望みます)。検証デザインと完璧な世界ではドキュメント

簡単なサンプル(JSFまたはZKのようなフレームワークを使用してWebアプリケーション)を作ることができます:特定の入力フィールドには、あなたがの制約機能を使用することができ0001と0500.

  1. の間に4桁の数字を受け入れますこれを行うあなたのWebフレームワーク。ユーザーにとって便利で、追加のサーバー負荷はありません。

  2. ビジネス層(例:java-ejb)で実行できます。同一のejbを使用するすべてのアプリケーションが同じ検証を使用するため、絶対確実です。あなたが評価後にユーザーにエラーを返す必要があるので、最終的にいいことではありません。サーバーとの間の往復が必要です。

  3. 誰かが非桁の値または4桁以上の値を(パーシスタンス層を介して)入力すると、DBに(部分的に)頼ることができます。醜い。

レジューム:1.と2.で冗長化します(ユーザーにとって使いやすく、すべてのアプリケーションで一貫性を持たせる)。 (プラスDBの長さは4となります)

今度は質問:どのようにこのバリデーションを文書化しますか?テキスト文書またはUML図ある意味では、3つまでの場所にビジネスロジックがあります。複雑なシステムでは、これは追跡して理解することが不可能に近くなります。

上記サンプルの実際のシナリオ:4桁から5桁に変更する必要があります。ドキュメントがなければ、変更が必要な場所を探す必要があります。

あなたは何を体験しますか?このためのヒントやツールはありますか?私のプロジェクトの一つで

歓声
スヴェン

答えて

1

、私は正規表現を使用して、私の検証のすべてを行うことができました。幸い、私のデータベース(PostgreSQL)は正規表現の制約をサポートしていました。正規表現をデータベーススキーマレベルで定義することで、アプリケーション全体でregex検証を簡単に使用できるようになりました。これはアプリケーションロジックによって継承され、次にクライアント側のJavaScript検証エンジンによって継承されました。

私の同僚と私はすべて流暢なSQLだったので、それは私たち自身に文書化していました。データベースのテーブル定義をすばやく確認すると、検証ルールがわかります。正式な文書を生成する必要がある場合は、情報をデータベースのメタデータから取り出すことは自明です。

ここでの私の経験はちょっとユニークですが、私は正規表現がどのように比較的自己文書化のポータブルな解決策であるかを強調したいと思います。

+0

正規表現を使用して他のデータ(テーブル、データベース)との関係でデータを確認するにはどうすればよいですか? – javadude

+0

あなたのDBがすでに作成されている場合、私はテーブル制約を気にせず、アプリケーションロジックを使って検証を行います。 – Elijah

1

このトリックは、DRY(自分自身を繰り返さないでください)プリンシパルに準拠することです。

この目標を達成するにはいくつかの異なる方法があります。

  1. が ビジネスやUI層に伝播しているDB(エリヤの 法)における制約
  2. は、ビジネス層(Java)の中で制約を定義定義し、 GWTを使用してUIで同じコードを実行してください
  3. など、私は同じ結果を達成するための他の方法がたくさんあると確信しています。

別の場所で制約を複製し、それを「文書化」すると(別の複製を追加すると)、効率の悪いレシピです!