シナリオ
各アイテムが 2 人の異なる人によってレビューされるシステムを構築しています。最初のレビュアーがアイテムのレビューを保存すると、次は 2 番目のチェッカーが個別のレビューを完了します。最初のレビューを送信してアイテムを再度開くと、自分の作品をレビューできないため、アイテムは読み取り専用状態になります。また、最初のレビュー担当者は、さらに情報が必要な場合にアイテムを保留状態にすることができますが、2 番目のレビューではできません。各ユーザーには、リストから項目を選択するたびに、特定のレビュー担当者ロールが与えられます。
私がこれまでに持っているもの
アイテムがエディターに読み込まれるたびに、ユーザーには 2 つの役割のいずれかが与えられInitialReviewer
ますSecondReviewer
。
public class Reviewer
{
public void AddReview(string review) { }
}
public class InitialReviewer : Reviewer, ICanPutIntoPendingState
{
public void PutIntoPendingState(string pendingState) { }
}
public class SecondReviewer : Reviewer
{
// Just use base class to add review
}
public class ReviewerService
{
private readonly Reviewer _reviewer;
public void AddReview(string review)
{
_reviewer.AddReview(review);
}
public void PutIntoPendingState(string pendingState)
{
_reviewer.PutIntoPendingState(pendingState);
}
}
私のエディタの縮小版。
public class Editor
{
private readonly ReviewerService _reviewerService;
public Editor(ReviewerService reviewerService)
{
_reviewerService = reviewerService;
}
public void SaveCommand()
{
if(user chose a pending state && _reviewerService.Reviewer is ICanPutIntoPendingState) // Pending state is a dropdown.
_reviewerService.PutIntoPendingState("pending state");
else // the user made a complete review
_reviewerService.AddReview("user review");
}
}
問題
私が抱えている問題は、そこに属していないクラスSave()
からロジックを内部に持つことから逃れることができないように見えることです。Editor
質問
クラスSave()
から関数内のロジックを取り除くにはどうすればよいですか? Editor
SRP の原則に違反しているようです。現在のレビュアー オブジェクトが型ICanPutIntoPendingState
であるかどうかを確認することが大きな問題だと思います。
かなりの数があるため、すべてのロジックを省略したことに注意してください。