質問

これはすでに質問され、回答されていると思いますので、事前にお詫びしますが、検索するための正しいキーワードがわかりません。「パターン」で検索すると、あまりにも多くの Q&A がヒットして役に立ちません。

私は回帰テストアプリに取り組んでいます。画面にフォームを表示していますが、アプリにログインしているユーザーに応じて、一部のフィールドが読み取り専用になるはずです。したがって、フィールド オブジェクトとユーザー オブジェクトを抽象化できますが、これら 2 つの概念の共通部分を説明するにはどのようなパターンに注目すればよいでしょうか?言い換えれば、フィールド 1 とユーザー A のフィールドは読み取り専用である必要があることをどのように説明すればよいでしょうか?読み取り専用 (またはそうでない) は Field クラスのプロパティである必要があるようですが、前述したように、それはどのユーザーがフォームを見ているかによって異なります。単純な 2 次元配列 (e.g.ReadOnly[Field,User] = True) ですが、これを表すために最も効果的な構造を選択したことを確認したいと思います。

この種のデータ構造に関するソフトウェア設計パターンはありますか?物事を複雑にしすぎていませんか? ここでは 2 次元配列を使用するのが最善の方法でしょうか?先ほども申し上げましたが、これが質問され、回答されたのであれば、お詫び申し上げます。ここで検索しましたが何も見つかりませんでした。Google 検索でも何も見つかりませんでした。

役に立ちましたか?

解決

テーブル駆動の設計は効果的です。スティーブ・マグワイアには良い例がほとんどありませんでした 書き込み 固体 コード .

これらはテストをキャプチャするための優れた方法でもあります。 フィット .

あなたの場合、次のようなものです:

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

field1.readOnly = Field1ReadonlyRules[ someUser.userClass ]

余談ですが、おそらくモデル化したいでしょう 両方 ユーザーとユーザー クラス/ロール/グループを組み合わせるのではなく、これらを組み合わせます。通常、ユーザーはキャプチャします 誰が (認証) グループ/ロールのキャプチャ中 (権限、機能)

他のヒント

一見すると、2 つの異なるタイプのユーザーが存在し、アクセス レベルが異なるように思えます。これは、継承 (PowerUser、User) によって、またはユーザーのレベルを設定するセキュリティ オブジェクトまたはトークンを含めることによって解決できます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top