我有一个包含其他实体的应用程序实体。在不特定于特定编程语言的伪代码中,它会被描述如下:
public class Application {
public Client client = null;
public Address address address = null;
public House house house = null;
public float price = 0;
public boolean hasMortgage = false;
}
每个实体的验证是一个单独的步骤,由服务器而不是客户端执行
我看到两个选项,想知道哪一个在实际项目中使用。
a) 每个单独的步骤:
1. User enters entity data
2. On the server the entity is validated in the controller of this entity
3. A record of the entity is created in the database
4. The id of the created record is returned to the user
完成所有步骤后,ApplicationController 将创建应用程序实体,通过 ID 分配现有的地址、房屋实体,并将应用程序实体记录保存到数据库中。
b) 在每个单独的步骤中:
1. The user enters the entity data
2. On the server, the entity is validated in the controller of this entity
3. The user receives a response "Yes, you can go to the next step".
当所有步骤都通过后,ApplicationController创建Application实体,创建Address、House实体,将它们分配给Application实体,然后将所有实体的记录保存到数据库中。
执行此操作没有错误或正确的架构。这仅取决于您的要求以及您的软件应该做什么。显然,从您描述的两种选择来看,每种模型都有优点和缺点。这是我所看到的:
坚持每一步模型:
优点
缺点
坚持到底模型
优点
缺点
客户如何适应这一点将影响这两种解决方案。这是 SPA 风格的前端渲染还是服务器端渲染。因此,问题的答案不仅取决于服务器所涉及的技术,还可能对客户端产生影响。
每个解决方案的优点和缺点可以通过引入其他解决方案来减轻。例如,后端或暂存表上的清理过程可在用户完成向导流程之前保存用户条目,使用浏览器中的本地存储来临时保存用户放弃的流程 - 无需后端清理,或在前端进行 Google 分析风格跟踪,以解决用户体验问题。在某种程度上,通过引入其他解决方案来抑制缺点,可以使每种解决方案变得可口。
因此有时归根结底是需要更多的支持解决方案来弥补问题。如果有很多,那么也许另一种方式更适合您。也许你可以容忍一些缺点,或者其他优点对你来说更重要。
我想补充一点,您要避免将状态存储在服务器内存中。保持服务器无状态应该是目标。当然,如果您将状态保存在 Redis 或外部缓存之类的东西中,那就没问题了,但这是一个更复杂的架构。但你绝对不希望它存储在服务器内存中。这绝对是低劣的设计。
希望这能让您对自己的优点和缺点有一些想法。