我希望我的網站能夠支持不同類型的訂閱,免費,付費等如何執行這些限制(業務限制)?
到目前爲止,我做了一個抽象類,它是這樣的
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語句。
你的意思是有更多的方法比CreatePost需要檢查發佈後,PlanType planType? – 2011-01-31 18:44:41
@Caspar Kleijne - 這只是我編造的一個例子(我不'真的有一個後限制)。 PlanType只是一個將支持他們目前所在計劃的枚舉。 – chobo2 2011-01-31 18:50:23
我不同意使用Limits作爲抽象類並繼承它。如果你的子類會因數而異,爲什麼要子類化呢? – Amy 2011-01-31 18:53:44