2011-01-31 22 views
2

我希望我的網站能夠支持不同類型的訂閱,免費,付費等如何執行這些限制(業務限制)?

到目前爲止,我做了一個抽象類,它是這樣的

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語句。

+0

你的意思是有更多的方法比CreatePost需要檢查發佈後,PlanType planType? – 2011-01-31 18:44:41

+0

@Caspar Kleijne - 這只是我編造的一個例子(我不'真的有一個後限制)。 PlanType只是一個將支持他們目前所在計劃的枚舉。 – chobo2 2011-01-31 18:50:23

+0

我不同意使用Limits作爲抽象類並繼承它。如果你的子類會因數而異,爲什麼要子類化呢? – Amy 2011-01-31 18:53:44

回答

0

你可以使用一個接口ILimit

interface ILimit 
{ 
    int PostLimit { get; protected set; } 
    bool IsLimitReached(int postCount); 
} 

現在你可以有其他幾類實現此接口(免費,高級,超級)。在您的服務方法CreatePost中,您只需傳遞實現接口的類的任何實例並使用它即可 - 因爲它們全都支持相同的接口,所以無需再區分它們。

public void CreatePost(Post post, ILimit limit) 
{ 
    if(limit.IsLimitReached()) 
    { 
     // do stuff 
    } 
} 
0

那麼,Limit屬性是綁定到什麼實體?我想它是綁定到博客(或者可能是一個論壇),它堅持在數據庫或其他東西。

如果是這樣,你可以做這樣的事情:

public void CreatePost(Post post) 
{ 
    if(post.Blog.IsLimitReached()) 
    { 
     // do stuff 
    } 
} 

Blog.IsPostLimitReached()應該調用從自身this.Limit.IsLimitReached

我希望你能明白我說的:)

0

如果您有不同類型的用戶,可以配合他們的帳戶(一旦他們已經登錄),以不同的RoleTypes。然後,您可以使用HttpContext.Current.User.IsInRole("RoleName")來查看它們是否處於特定角色,並將其用作顯示/隱藏功能的基礎。