2 Stimmen

Wie kann ich diese Grenzen (Geschäftsgrenzen) durchsetzen?

Ich möchte, dass meine Website verschiedene Abonnementtypen unterstützt, z. B. kostenlos, Premium und so weiter.

Bislang habe ich eine abstrakte Klasse erstellt, die wie folgt aussieht

  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)
        {
        }

    } 

Das habe ich jetzt für alle meine Kontotypen gemacht. Das Problem ist nun, dass ich nicht weiß, wie ich diese Klasse tatsächlich verwenden soll.

Ich habe zum Beispiel eine Dienstschicht namens PostService und in dieser Klasse habe ich

public void CreatePost(Post post)
{
  // do stuff here
}

Bei dieser Methode weiß ich nicht, wie ich überprüfen kann, ob sie die Grenze erreicht haben. Ich weiß nicht, wie ich das überprüfen kann, weil ich nicht weiß, wie ich herausfinden kann, ob ich das FreeLimit oder das PremiumLimit verwenden soll oder welches Konto sie haben.

Ich denke, dass ich zuerst ihre Rolle herausfinden muss und dann irgendwie diese Informationen verwenden muss, um die richtige Klasse zu erstellen.

Ich denke, ich könnte etwas haben wie

public void CreatePost(Post post, PlanType planType)
{
   Limits limit;
   switch(planType)
   {
      case planType.Free:
         limit = new FreeLmit()
        break;
   }

    if(limit.IsLimitReached())
    {
      // do stuff
    }
} 

Mir gefällt dieser Weg nicht, da nun jede Methode, die einen Grenzwert überprüfen muss, dies tun muss. Ich werde ein paar Methoden haben, die diese Prüfung in meiner Dienstschicht erfordern.

Also dachte ich daran, es in meinen Konstruktor zu setzen, aber ich weiß nicht, ob es gut ist, eine Switch-Anweisung in einem Konstruktor zu haben.

0voto

BrokenGlass Punkte 153950

Sie könnten eine Schnittstelle verwenden ILimit

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

Jetzt können Sie mehrere andere Klassen (Free, Premium, Super) haben, die diese Schnittstelle implementieren. In Ihrer Dienstmethode CreatePost können Sie einfach eine beliebige Instanz einer Klasse übergeben, die die Schnittstelle implementiert, und sie verwenden - es ist nicht mehr nötig, sie zu unterscheiden, da sie alle dieselbe Schnittstelle unterstützen.

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

0voto

goenning Punkte 6384

Nun, die Limit Eigentum ist an welches Unternehmen gebunden? Ich nehme an, sie ist an den Blog (oder vielleicht ein Forum) gebunden und wird auf einer DB oder etwas anderem persistiert.

Wenn ja, können Sie etwa so vorgehen:

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

En Blog.IsPostLimitReached() sollte anrufen this.Limit.IsLimitReached vor sich selbst.

Ich hoffe, Sie können verstehen, was ich gesagt habe :)

0voto

Jeff Punkte 2805

Wenn Sie verschiedene Benutzertypen haben, können Sie deren Konten (sobald sie sich angemeldet haben) mit verschiedenen RoleTypes . Dann können Sie HttpContext.Current.User.IsInRole("RoleName") um festzustellen, ob sie eine bestimmte Rolle innehaben, und verwenden Sie dies als Grundlage für das Anzeigen/Ausblenden von Funktionen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X