2011-01-31 7 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

게시 지점, PlanType planType을 확인해야하는 CreatePost보다 많은 방법이 있다는 뜻입니까? –

+0

@Caspar Kleijne - 글쎄, 이건 내가 만든 예일 뿐이야. PlanType은 현재 사용중인 계획을 보유하는 enum입니다. – chobo2

+0

Limits를 추상 클래스로 사용하고 상속 한 것에 동의하지 않습니다.하위 클래스가 숫자에 따라 다를 경우 하위 클래스를 사용해야하는 이유는 무엇입니까? – Amy

답변

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

나는 이것에 대해 생각하고 있었지만, 이것에 대해 싫어하는 것은 내가 매번 나 자신을 반복 할 필요가 있다는 것이다. 나는 IsLimitReached가 if 문과 동일한 메소드라는 것을 의미한다. 그러나 지금 나는이 같은 방법을 3 번 쓰고있다. – chobo2

0

글쎄, Limit 속성은 어떤 개체에 연결되어 있습니까? 나는 그것이 블로그 (또는 어쩌면 포럼)에 묶여 있다고 가정하고 DB 또는 다른 어떤 것에 지속됩니다.

그렇다면, 당신은 같은 것을 할 수 있습니다

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

Blog.IsPostLimitReached() 자체에서 this.Limit.IsLimitReached를 호출해야합니다.

나는 당신이 당신이 사용자의 다른 유형이있는 경우 (그들이에 로그인 한 후) :

0

, 당신은 다른 RoleTypes에 자신의 계정을 연결할 수 있습니다 말을 이해할 수 있기를 바랍니다. 그런 다음 HttpContext.Current.User.IsInRole("RoleName")을 사용하여 특정 역할에 속하는지 확인하고 기능을 표시/숨기기위한 기초로 사용할 수 있습니다.

+0

분명히하기 위해, 이것을하기 위해 RoleProvider에 기반한 클래스를 구현해야 할 수도 있습니다. 그런 다음 .NET의 기본 제공 멤버십을 사용하여 사용자 계정을 다른 역할에 연결할 수 있습니다. 이것은 분명히 사용자가 로그인해야하는 경우에만 작동합니다. – Jeff

관련 문제