2017-04-02 4 views
0

Das folgende Problem haben. Der Artikel durchläuft mehrere Phasen, bevor er von verschiedenen Rollen veröffentlicht wird.Entwurfssystem für eine bestimmte Artikelklasse mit Zuständen

Writer -> writes 
Approver -> approves 
Admin -> Publishes 

Entwerfen Sie ein Programm, das für maximale Erweiterbarkeit ermöglichen: Dies ist, was ich habe. Kann mir jemand bitte mitteilen, ob dies der richtige Ansatz ist? Gibt es einen besseren?

public interface IRole 
{ 
    IRole Write(); 
    IRole Approve(); 
    IRole Publish(); 
} 

internal class Writer : IRole 
{ 
    public IRole Write() 
    { 
     return new Approver(); // next needs approval 
    } 

    public IRole Approve() 
    { 
     return this; 
    } 

    public IRole Publish() 
    { 
     return this; 
    } 
} 

internal class Approver : IRole 
{ 
    public IRole Write() 
    { 
     return new Writer(); 
    } 

    public IRole Approve() 
    { 
     // publish 
     return new Admin(); 
    } 

    public IRole Publish() 
    { 
     return this; 
    } 
} 


internal class Admin : IRole 
{ 
    public IRole Write() 
    { 
     return new Writer(); 
    } 

    public IRole Approve() 
    { 
     return new Approver(); 
    } 

    public IRole Publish() 
    { 
     return this; 
    } 
} 

internal class Article 
{ 
    public Article() 
    { 
     role = new Writer(); 
    } 

    private IRole role { get; set; } 

    public void Write() 
    { 
     role = role.Write(); 
    } 

    public void Approve() 
    { 
     role = role.Approve(); 
    } 

    public void Publish() 
    { 
     role = role.Publish(); 
    } 
} 

    private static void Main(string[] args) 
    { 
     var article = new Article(); 
     article.Approve(); // can't do - write first 
     article.Write(); 
     article.Publish(); // can't do 
     article.Approve(); // can 
     article.Write(); // can go back 
     article.Approve(); // can 
     article.Publish(); 
    } 
+0

für die Erweiterbarkeit Ich würde zulassen, dass beliebige Arbeitsabläufe auf Artikel angewendet werden. von denen write-> approve-> publish ist nur ein Workflow –

Antwort

Verwandte Themen