2008-09-09 14 views
3

これは既に尋ねられて答えられていると確信していますので、事前に謝りますが、検索する正しいキーワードを見つけられません。 "Pattern"の検索が多すぎるQ & Aが役に立ちます。2つのオブジェクトのオーバーラップのパターン

私は回帰テストのアプリケーションに取り組んでいます。私は画面上にフォームを表示していて、ユーザーがアプリケーションにログインしている場合、フィールドのいくつかは読み取り専用でなければなりません。だから私はフィールドオブジェクトを抽象化することができ、私はユーザオブジェクトを抽象化することができますが、これらの2つの概念の交差を記述するためにどのパターンを調べるべきですか?言い換えれば、フィールド1とユーザーAのフィールドを読み込み専用にする方法を説明する必要がありますか?読み取り専用(またはそうでない)はFieldクラスのプロパティである必要がありますが、私が言ったように、どのユーザーがフォームを見ているかによって異なります。私は単純な2次元配列(例えばReadOnly [Field、User] = True)を考えましたが、これを表現するために最も効果的な構造を選んでいるかどうか確認したいと思います。

この種のデータ構造に関するソフトウェア設計パターンはありますか?私はものをオーバーコンプリートしていますか?2次元配列がここに行く最良の方法でしょうか?これが尋ねられ答えられたら、私は謝ります。私はここで検索して何も見つからなかったし、Googleの検索でも何も出せなかった。

答えて

2

テーブル駆動型設計が有効です。 スティーブマグワイアにはいくつかの素晴らしい例がありました書き込み固体コードです。

これらはまた、テストをキャプチャするための素晴らしい方法です。fitを参照してください。あなたのケースでは

のようなもの:

Field1ReadonlyRules = { 
    'user class 1' : True, 
    'user class 2' : False 
} 

field1.readOnly = Field1ReadonlyRules[ someUser.userClass ] 

さておき、おそらくユーザーとそれらを組み合わせるの代わりにユーザクラス/役割/グループの両方をモデルにしたいと。 グループ/役割が(パーミッション、能力)

+0

それは素晴らしい提案ですmaccullt。ありがとう。この問題にアプローチするには、テーブル駆動の手法が最適な方法かもしれません。 –

1

2つの異なるタイプのユーザーがいて、アクセスレベルが異なると、最初はぼやけて聞こえます。これは、継承(PowerUser、User)、またはユーザーのレベルを設定するセキュリティオブジェクトまたはトークンを含むことで解決できます。

ルールとして継承が気に入らない場合は、アプリケーションでStateパターンを使用するか、ユーザーオブジェクトを装飾する(Shudder)か、異なるセキュリティレベルの戦略パターンを追加することができます。しかし、少し早いと思いますが、アイテムがどのように成長し、維持されるかを確かめるまでは、通常はパターンを適用しません。

+0

をキャプチャしながら、通常はい、ダンは、それはほとんどの状況だ(認証)を取り込み、ユーザ - 実際にそこに関わる複数のセキュリティレベルがあるが、私はあなたを取りますポイント。それは素晴らしい提案です。ありがとう。 –

関連する問題