が必要とされるどのような私のクラスの構造Strategyパターンの実装
public abstract class BaseUser
{
protected List<Perm> permissions;
public abstract void AddPerm(Perm perm);
}
public class NormalUser : BaseUser
{
public override void AddPerm(Perm perm)
{
throw new InvalidOperationException("A normal user cant add permissions");
}
}
public class SpecialUser : BaseUser
{
public override void AddPerm(Perm perm)
{
if(permissions==null) permissions=new List<Perm>();
this.permissions.Add(perm);
}
}
class Container
{
List<BaseUser> users;
}
です:
- コンテナSpecialUserは、追加の権限の機能を持つことになります
- ユーザーの両方のタイプを保持します - 完了
通常のユーザーには許可を許可できません - 完了
私は
上で実現するための戦略パターンを選択している私は達成することはできませんよものは、ユーザーの
両方のタイプである(ユーザーがデフォルトの権限のリストで初期化されます)データベースからの水和されます
この状況でこのパターンを選択するのは間違いありませんか?はいの場合は、どのように要件4に対処しますか?
多くのおかげで、 asolvent
私はここで戦略パターンを見ることができません。共通の基底クラスから2つのクラスを派生させるだけです。あなたの質問はデータアクセスに関するものなので、データベースにアクセスするために使用する技術の種類を指定し、関連するコードを表示する必要があります。 AddPermメソッドについて:私は基本クラスで宣言しませんが、SpecialUserクラスでのみ宣言します。したがって、クライアントがNormalUser型のユーザーに対して呼び出すことができないことは明らかです。 – Jan
こんにちは、返信いただきありがとうございます。私はそれをStrategyと呼んでいます。なぜなら、ユーザーはSpecialまたはNormalのいずれかになるからです。コンテナにはユーザのリスト(Special + Normal)があります。私は間違っているかもしれませんが、私たちは戦略をどのように実装するのでしょうか? (私はそれに精通していませんが、私の解釈が間違っている場合は指導してください) 私は子クラスにメソッドを置くことにした場合、私は親を介して呼び出すことができなくなり、結局私は2つの異なるコレクション。 – asolvent