工作流实际上由领域知识和仇恨基础设施组成。
如果应用程序不是用超媒体设计的,你甚至可能不需要 hatoas 部分。但是领域知识仍然存在,它们只是存在于最终用户的脑海中。您需要领域知识来验证用户的命令,以防他们忘记它。
所以对于hateoas,我将工作流实现分为两部分:领域模型和hateoas 基础设施。
领域模型告诉领域知识。
另一方面,hateoas 基础设施是 hatoas 特定的,将它们排除在域之外。
这是一个使用 springframework-hateoas 的 java 示例。我将工作流放在将域模型映射到资源的过程中。
@Component
public class OrderResourceAssembler extends ResourceAssemblerSupport<Order, OrderResource> {
@Override
public OrderResource toResource(Order model) {
OrderResource resource = mapToResource(model);
resource.add(orderResourceHref(model).withSelfRel());//add self link
if (model.isAvailableToCancel()) { //let the model tell
//add cancel link
resource.add(orderResourceHref(model).withRel("cancel"));
}
if (model.isAvailableToPay()) { //let the model tell
//add payment link
resource.add(new Link("http://www.restfriedchicken.com/online-txn/" + model.getTrackingId(), "payment"));
}
//etc
return resource;
}
// omitted codes
}
如果模型无法自行判断,您可以引入规范对象来完成这项工作。