产品-1-四眼原则
程序员文章站
2022-05-29 22:48:17
...
各位读者,早上好!
这里从产品角度介绍下“四眼原则”。自从产品有一次再开发中提出“四眼原则”的设计想法后,很多版本的迭代,凡是涉及到审核的,基本都需要运用这种规则。
四眼原则—— 一个人提交的某种东西,自己不能立马审核,需要过“冷静期”之后自己方能审核;或者自己提交东西团队中不同的人可以立马审核。
优点:
为了避免在团队中自己提交东西自己审核,加强团队之间的监督和制约,也让自己“冷静”一段时间后重新审核自己提交的东西,避免当时提交时的思维盲点。
这里涉及2点:
1、这个业务有提交、审核的流程;
2、提交人、审核人、提交时间、冷静时间 四个关键要素。
需求提出来了,代码怎么抽象呢?看下一这段代码:
/**
以下代码是简化版,并非真实业务代码,但足够表达我要表达的意思
*/
@GET
@Path("list")
@RolesAllowed('OPERATOR','OPERATOR_ADMIN')
public List<BusinessDTOs> list(@QueryParam("offset") @DefaultValue("10")int offset, @QueryParam("limit") @DefaultValue("10")int limit){
List<BusinessDTOs> dtos = businessService.query(offset,limit);
return dtos;
}
上面这段代码就是最终需要返回给前端的一个业务列表,具体什么列表是有业务决定的,四眼原则怎么抽象到代码中?加上四眼原则后,要达到的效果是这样的:
1、该列表有”审核“按钮,如果不满足四眼原则,”审核“按钮不展示;展示需要过冷静期后方可审核;
2、对于团队其他成员,审核按钮是可以看到的(冷静期只是限制提交人);
3、冷静期过后,自己方可提交;
抽象出来就是这样:
package com.cmh.business;
import org.joda.time.DateTime;
import java.io.Serializable;
/**
* @author:起舞的日子
* @date: 2020/4/10 上午7:19
*/
public abstract class FourEyePriciple implements Serializable {
/**
* 是否可操作
*/
private boolean operable;
/**
* 不可操作原因
*/
private String notOperableReason;
public void apply(String submitter, String auditor, DateTime submittedTime, int fourEyeHours) {
if (!submitter.equals(auditor)) {
operable = true;
return;
}
if (submittedTime == null) {
operable = true;
return;
}
if (submittedTime.plusHours(fourEyeHours).isBeforeNow()) {
operable = true;
return;
}
operable = false;
notOperableReason = String.format("待团队成员确认,请于%d小时候操作", fourEyeHours);
}
}
下一步让BusinessDTO继承一下FourEyePriciple,然后在Resource层遍历下DTOs调用下方法即可。
@GET
@Path("list")
@RolesAllowed('OPERATOR','OPERATOR_ADMIN')
public List<BusinessDTOs> list(@QueryParam("offset") @DefaultValue("10")int offset, @QueryParam("limit") @DefaultValue("10")int limit){
List<BusinessDTOs> dtos = businessService.query(offset,limit);
dtos.foreach(e->{
e.apply(dto.getCreatedBy(),dto.getCurrentUserId(),dto.getCreatedTime,foreEyeHours);
});
return dtos;
}
这个fourEyeHours就走配置,支持灵活调整。
好了,以后关于设计的一些零碎想法就作为”产品“系列发布吧。
再会!
下一篇: Istio 安装