0
次の問題があります。記事はいくつかの段階を経て、いくつかの異なる役割によって公開されています。最大の拡張を可能に状態を持つ指定されたArticleクラスの設計システム
Writer -> writes
Approver -> approves
Admin -> Publishes
デザインプログラム:これは私が持っているものである 。これが正しいアプローチであるかどうか誰かに教えてもらえますか?そこには良いものがありますか?あなたは「責任のチェーン」と呼ばれて探しているものを
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();
}
拡張性について記事に任意のワークフローを適用することを許可します。そのうちのwrite-> approve-> publishはただ一つのワークフローです –