私は別のサブスクリプションタイプをサポートするためのサイト、無料、プレミアムおよびなどこれらの制限(ビジネス制限)を適用するにはどうすればよいですか?
は、これまでのところ私は、だから今、私はすべての私のアカウントの種類のためにこれをやった
public abstract class Limits
{
public int PostLimit { get; protected set; }
protected Limits(int postLimit)
{
PostLimit = postLimit;
}
public bool IsLimitReached(int postCount)
{
return postCount > PostLimit
}
}
public class FreeLimit : Limits
{
private const int postLimit = 1;
public FreeLimit()
: base(postLimit)
{
}
}
このようなものです抽象クラスを作っしたいです。今問題は、このクラスを実際にどのように使用するのか分かりません。
は、例えば、私はサービス層コールPostServiceを持っており、このクラスでは、私は、彼らが限界に達しているかどうかを確認する方法がわからない、この方法では今
public void CreatePost(Post post)
{
// do stuff here
}
を持っています。 FreeLimitまたはPremiumLimitを使用するべきかどうか、またどのようなアカウントを持っているべきかを確認する方法がわからないため、チェックする方法がわかりません。
私は最初に自分の役割を把握し、その情報を使って適切なクラスを作成しなければならないと考えています。
私は私が今のように制限を確認する必要があるすべての方法がこれを行う必要がありますため、この方法は好きではない
public void CreatePost(Post post, PlanType planType)
{
Limits limit;
switch(planType)
{
case planType.Free:
limit = new FreeLmit()
break;
}
if(limit.IsLimitReached())
{
// do stuff
}
}
のようなものを持っていることができると思います。私は私のサービス層でこのチェックが必要ないくつかの方法を持っています。
私はそれを私のコンストラクタに入れることを考えていましたが、コンストラクタでswitch文を持つのが良いのかどうか分かりません。
あなたは、ポスト投稿、PlanType planTypeをチェックする必要があるCreatePost以外のメソッドがあることを意味しますか? –
@Caspar Kleijne - これは私が作った一例です(私は実際にはポストリミットを持っていません)。 PlanTypeは現在の計画を保持する列挙型にすぎません。 – chobo2
制限を抽象クラスとして使用し、それを継承することに同意しません。あなたのサブクラスが数値によって異なる場合、それらをサブクラス化するのはなぜですか? – Amy