构建高效的测验系统 API 层
1. 引言
GenServer API 已经可以正常工作,但仍有一些工作要做。目前,服务器的客户端 API 相互孤立,只能处理独立的任务,并且可能存在用户数据损坏的问题。此外,还需要一个层来将创建测验和参加测验这两个概念结合起来。
2. 用 API 封装服务器
API 层的主要任务是隔离服务器层与不一致的数据,并将各个 GenServer 实现中的独立概念整合在一起。它还会向用户隐藏内部实现细节,例如 QuizManager 服务器中的 Quiz 结构体。服务器层或功能核心的任何实现细节都将被隐藏。
尽管内部细节可能有很大不同,但用 API 封装的服务器将具有许多面向对象编程(OOP)对象的特征。它会在函数 API 之后隐藏实现细节(包括状态),允许通过消息传递在组件之间进行复杂的交互,并方便进行状态跟踪。
在深入研究 API 之前,需要进行一些验证工作。
3. 构建验证机制
3.1 验证策略
验证的目标是选择最接近用户的公共访问点。考虑到测验可以作为无持久化的服务(如教育网站)或在更正式的课堂环境中作为数据库支持的测验引擎运行,为了保持服务器代码的整洁并只实现一次验证,将在 API 层进行验证。
构建验证机制的策略很简单:每个验证器(无论是处理嵌套列表还是单个字段)都必须对错误列表进行归约操作,这些错误作为累加器。如果在完全验证每个字段后错误列表为空,则模型有效。
虽然可以使用变更集(changesets),但引入变更集会同时引入 Ecto 的所有功能。为了避免在无状态层引入数据库概念,将构建一个
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



