告别复杂校验逻辑!Norm的schema/1函数轻松定义结构化数据模型
告别复杂校验逻辑Norm的schema/1函数轻松定义结构化数据模型【免费下载链接】normData specification and generation项目地址: https://gitcode.com/gh_mirrors/no/norm在现代软件开发中数据校验和结构化数据模型定义往往是一项繁琐且容易出错的任务。无论是处理API请求、数据库交互还是配置文件解析开发者都需要编写大量重复的校验代码。今天我们将介绍一个强大的工具——Norm的schema/1函数它能帮助你轻松定义结构化数据模型告别复杂的校验逻辑。什么是NormNorm是一个专注于数据规范和生成的Elixir库。它提供了一种简洁、声明式的方式来定义数据结构和校验规则让开发者能够更专注于业务逻辑而非数据校验细节。Norm的核心功能之一就是schema/1函数它允许你轻松定义复杂的数据模型。schema/1函数简化数据模型定义schema/1函数是Norm库中的核心函数之一位于lib/norm/core/schema.ex文件中。它的主要作用是根据输入的结构可以是map或struct构建一个数据模型规范。这个规范不仅定义了数据的结构还包含了相应的校验规则。基本用法schema/1函数的基本用法非常简单。当你传入一个map时它会创建一个基于该map结构的数据模型user_schema schema(%{name: :string, age: :integer, email: :string})这样就定义了一个用户数据模型包含name、age和email三个字段分别对应字符串、整数和字符串类型。与Struct结合使用schema/1函数还支持与Elixir的struct结合使用这在处理复杂业务实体时非常有用。例如如果你有一个User structdefmodule User do defstruct [:name, :age, :email] end你可以直接使用schema/1函数为这个struct创建数据模型user_schema schema(%User{})Norm会自动根据struct的定义构建相应的数据模型规范。这种方式不仅简化了模型定义还能确保数据模型与业务实体保持一致。实际应用示例让我们通过一个实际的例子来看看schema/1函数如何简化数据校验。假设我们需要校验一个用户注册请求的数据。定义数据模型首先我们使用schema/1函数定义用户数据模型user_schema schema(%{ name: spec(is_binary() and not empty?()), age: spec(is_integer() and (1 0 and 1 150)), email: spec(is_binary() and matches(~r/^[^\s][^\s]\.[^\s]$/)) })在这个例子中我们不仅定义了字段类型还添加了更具体的校验规则name必须是非空字符串age必须是0到150之间的整数email必须符合基本的邮箱格式。数据校验有了数据模型后我们可以使用Norm的conform函数来校验输入数据input %{name: John Doe, age: 30, email: johnexample.com} case conform(input, user_schema) do {:ok, conformed} - IO.puts(数据校验通过#{inspect(conformed)}) {:error, errors} - IO.puts(数据校验失败#{inspect(errors)}) end这段代码会根据我们定义的schema对输入数据进行校验并返回校验结果。高级特性schema/1函数还支持一些高级特性让数据模型定义更加灵活和强大。嵌套结构你可以在schema中定义嵌套结构轻松处理复杂的数据模型address_schema schema(%{ street: :string, city: :string, zip_code: spec(is_binary() and matches(~r/^\d{5}$/)) }) user_schema schema(%{ name: :string, age: :integer, address: address_schema })选择性校验schema/1函数允许你指定哪些字段是必需的哪些是可选的提供了更细粒度的控制user_schema schema(%{ required: %{name: :string, email: :string}, optional: %{age: :integer, phone: :string} })为什么选择Norm的schema/1函数简洁的语法使用声明式的方式定义数据模型代码更易读、易维护。强大的校验能力内置多种校验规则支持自定义校验函数。与Elixir生态无缝集成完美支持Elixir的struct、map等数据结构。丰富的错误信息校验失败时提供详细的错误信息便于调试。可扩展性支持自定义类型和校验规则满足复杂业务需求。开始使用Norm要开始使用Norm和schema/1函数首先需要将Norm添加到你的项目依赖中。在mix.exs文件中添加defp deps do [ {:norm, ~ 0.13} ] end然后运行mix deps.get安装依赖。如果你想直接体验Norm可以克隆仓库git clone https://gitcode.com/gh_mirrors/no/norm总结Norm的schema/1函数为Elixir开发者提供了一种简洁、强大的方式来定义和校验结构化数据模型。它不仅能大大减少重复的校验代码还能提高代码的可读性和可维护性。无论你是在构建API、处理数据库交互还是解析配置文件schema/1函数都能帮助你轻松应对数据校验的挑战。如果你厌倦了编写复杂的校验逻辑不妨试试Norm的schema/1函数体验声明式数据模型定义的魅力【免费下载链接】normData specification and generation项目地址: https://gitcode.com/gh_mirrors/no/norm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

CosmJS与Webpack集成:解决浏览器环境下的构建难题

CosmJS与Webpack集成:解决浏览器环境下的构建难题

CosmJS与Webpack集成:解决浏览器环境下的构建难题 【免费下载链接】cosmjs The Swiss Army knife to power JavaScript based client solutions ranging from Web apps/explorers over browser extensions to server-side clients like faucets/scrapers. 项目地址…

2026/10/4 7:13:54 阅读更多 →
Flutter Picker性能优化:提升选择器流畅度的5个技巧

Flutter Picker性能优化:提升选择器流畅度的5个技巧

Flutter Picker性能优化:提升选择器流畅度的5个技巧 【免费下载链接】flutter_picker Flutter picker plugin 项目地址: https://gitcode.com/gh_mirrors/fl/flutter_picker Flutter Picker作为一款功能强大的选择器插件,在移动应用开发中被广泛使…

2026/10/4 7:14:07 阅读更多 →
Stratagus引擎AI开发教程:打造智能游戏对手的完整攻略

Stratagus引擎AI开发教程:打造智能游戏对手的完整攻略

Stratagus引擎AI开发教程:打造智能游戏对手的完整攻略 【免费下载链接】stratagus The Stratagus strategy game engine 项目地址: https://gitcode.com/gh_mirrors/st/stratagus Stratagus是一款免费的奇幻实时战略游戏引擎,通过其强大的脚本化A…

2026/10/2 10:14:58 阅读更多 →

最新新闻

如何在 PenguinHarness 中用好工具审批:4 种审批模式保障 Agent 安全执行

如何在 PenguinHarness 中用好工具审批:4 种审批模式保障 Agent 安全执行

如何在 PenguinHarness 中用好工具审批:4 种审批模式保障 Agent 安全执行 【免费下载链接】penguin-harness 🐧 Unified and Stable RSI Platform 项目地址: https://gitcode.com/gh_mirrors/pe/penguin-harness PenguinHarness 是一个面向自改进…

2026/10/4 7:13:50 阅读更多 →
Windows 下 Codex 配置全攻略:从安装、登录到接入 DeepSeek

Windows 下 Codex 配置全攻略:从安装、登录到接入 DeepSeek

Codex 这个编码助手,最近在 Windows 用户群里讨论度很高。命令行工具、桌面版、登录认证、配置文件,再加上不少人喜欢把它接到 DeepSeek 这类第三方模型服务上,整套流程踩下来,问题其实不少。我前后帮朋友和同事配了不下十台 Wind…

2026/10/4 7:13:50 阅读更多 →
手把手教你学Simulink——考虑器件结温特性的双向DC-AC逆变器热管理建模仿真一、为什么必须做结温

手把手教你学Simulink——考虑器件结温特性的双向DC-AC逆变器热管理建模仿真一、为什么必须做结温

目录 手把手教你学Simulink——考虑器件结温特性的双向DC-AC逆变器热管理建模仿真 一、为什么必须做结温仿真? 二、电热耦合建模的整体思路 三、损耗建模:导通损耗与开关损耗 3.1 导通损耗 3.2 开关损耗 3.3 Simulink实现技巧 四、热网络建模:Foster vs Cauer 4.1 F…

2026/10/4 7:13:50 阅读更多 →
C语言函数封装实战:从完数计算理解factorsum设计

C语言函数封装实战:从完数计算理解factorsum设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 7:13:49 阅读更多 →
C#开发的 电脑低电量 充电报警 ,源码公开

C#开发的 电脑低电量 充电报警 ,源码公开

虽然笔记本电量低,会有提醒,但常常是静默没有声音的。笔者常让笔记本未插电,放在一边播放视频就睡着,醒来电脑电量早已耗干! 反复如此,又花钱换电池,索性,开发了这软件。并且会将此软…

2026/10/4 7:13:49 阅读更多 →
GitHub日榜时间锚定采集系统:抗干扰可验证趋势监测

GitHub日榜时间锚定采集系统:抗干扰可验证趋势监测

1. 这不是“榜单搬运工”,而是一套可复用的 GitHub 日榜趋势监测系统你有没有试过每天早上打开 GitHub Trending 页面,想看看最近有什么新项目冒头,结果发现页面加载慢、分类混乱、语言过滤不精准,甚至刷新几次后数据就变了&#…

2026/10/4 7:12:49 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →