我希望我的网站支持不同的订阅类型,免费,高级等。
到目前为止,我创建了一个类似于
的抽象类 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 :(得分:0)
您可以使用界面ILimit
interface ILimit
{
int PostLimit { get; protected set; }
bool IsLimitReached(int postCount);
}
现在您可以使用其他几个类(Free,Premium,Super)来实现此接口。在您的服务方法CreatePost
中,您只需传递实现该接口的类的任何实例并使用它 - 由于它们都支持相同的接口,因此无需再区分它们。
public void CreatePost(Post post, ILimit limit)
{
if(limit.IsLimitReached())
{
// do stuff
}
}
答案 1 :(得分:0)
那么,Limit
属性与哪个实体相关联?我认为它与博客(或者可能是论坛)相关联,并且它会持久保存在数据库或其他内容上。
如果是这样,你可以这样做:
public void CreatePost(Post post)
{
if(post.Blog.IsLimitReached())
{
// do stuff
}
}
Blog.IsPostLimitReached()
应该自己调用this.Limit.IsLimitReached
。
我希望你能理解我说的话:)。
答案 2 :(得分:0)
如果您有不同类型的用户,则可以将其帐户(一旦登录后)绑定到不同的RoleTypes
。然后,您可以使用HttpContext.Current.User.IsInRole("RoleName")
查看他们是否处于特定角色,并将其用作显示/隐藏功能的基础。