设想
我正在构建一个系统,每个项目都由 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
是一个大问题。
请注意,我省略了所有逻辑,因为有很多。