从JSON示例数据生成Web应用程序代码
目录
介绍
它是如何工作的?
创建数据模型
呈现代码
BootGen SDK
框架插件
Web应用程序
在这篇文章中,您将了解BootGen的内部工作原理,BootGen是一种代码生成器,可以基于JSON数据集创建 ASP.NET 5和Vue 3应用程序。
介绍
{"users": [{"userName": "Jon","email": "jon@arbuckle.com","pets": [{"name": "Garfield","species": "cat"},{"name": "Odie","species": "dog"}]}]
}
想象一下,您开始为宠物主人编写Web应用程序。上面的一段JSON代码是您的初始数据集。你如何开始?在您可以开始实现您为该项目设想的热门功能之前,需要先完成一些基础工作。
对于数据库,您将需要两个表,users以及pets。 您将需要一个种子,用初始dataset填充数据库。 对于后端,您将需要user和pet类的数据服务和控制器。对于前端,您将需要一个REST API客户端和状态管理。一些基本的查看器和编辑器也一定会派上用场。哦,不要忘记身份验证!
现在您已经完成了所有这些,您可以开始处理有意义的部分。但是这个“基础工作”需要做多少工作?好吧,如果您选择的堆栈是带有Vue 3和TypeScript的ASP.NET 5,那么它将是26个文件中的1677行代码。此代码量不包括使用dotnet new和vue create命令创建的空项目。
BootGen项目的目标是获取JSON dataset并为您的项目生成基础,从而为您节省数小时甚至数天的工作。
您已经可以在bootgen.com 上尝试了!
它是如何工作的?
本文的重点是讨论BootGen在底层是如何工作的。如果您只想使用该工具并享受空闲时间,则没有必要了解这一点。
创建数据模型
生成过程中有两个重要步骤。首先,应基于数据集构建数据模型。以下类可用于创建数据模型。
public class ClassModel
{public int Id { get; set; }public string Name { get; set; }public List<Property> Properties { get; }
}public class Property
{public string Name { get; set; }public BuiltInType BuiltInType { get; set; }public bool IsCollection { get; set; }public ClassModel Class { get; set; }
}public enum BuiltInType { String, Int, Float, Bool, DateTime, Object }
这些是从我们在SDK中实际使用的内容简化而来的。如果您对完整的元模型感兴趣,可以在GitHub - BootGen/BootGenSDK: Customizable code generator library for rapid application prototyping.找到它。
如果我们假设集合名称始终采用复数形式,而其他所有内容始终采用单数形式,则可以从JSON属性名称中轻松推断出类的名称。Pluralize.NET使我们能够方便地找到特定单词的复数或单数形式。
对于每个JSON属性,我们将在我们的模型中创建一个属性。如果它有一个原始类型(string, integer, float, boolean, 或date-time),那么我们一步完成。但是,如果它是object,那么我们继续递归:我们将检查是否已经存在同名的类模型。如果是,我们将扩展它,如果不是,那么我们创建一个新的。
呈现代码
为了呈现代码,我们使用了一种称为Scriban的模板语言。生成C#实体类的最简单模板如下所示:
public class {{ class.name }}
{{{~ for property in class.properties ~}}public {{ get_type property }} {{ property.name }} { get; set; }{{~ end ~}}
}
class 变量是指ClassModel类型的对象。在Scriban中,每个属性和函数名称都转换为snake大小写。get_type是一个用C#实现的函数调用,如下所示:
public static string GetType(Property property)
{string baseType = GetBaseType(property);if (property.IsCollection)return $"List<{baseType}>";return baseType;
}public static string GetBaseType(Property property)
{switch (property.BuiltInType){case BuiltInType.Bool:return "bool";case BuiltInType.Float:return "float";case BuiltInType.String:return "string";case BuiltInType.DateTime:return "DateTime";case BuiltInType.Object:return property.Class.Name;default:return "int";}
}
生成TypeScript代码时,使用了不同的GetType函数。
项目结构
BootGen SDK
- https://github.com/BootGen/BootGenSDK
这是处理从JSON输入构建数据模型并呈现Scriban模板的核心库。
框架插件
对不同框架的支持是作为插件实现的。目前,实现了以下插件:
- ASP.NET 5
- 带有TypeScript的Vue 3
- 带有JavaScript的Vue 3
一个框架插件包含:
- 一堆Scriban模板
- 一些静态文件(基本上是给定框架的空项目)
- 一个配置文件
我们尽最大努力保持插件界面干净,以便在未来轻松实现对其他框架的支持。
Web应用程序
- https://github.com/BootGen/BootGen
这是部署到bootgen.com的Web应用程序。一种使用BootGen的便捷方式。
https://www.codeproject.com/Tips/5309774/Generating-Web-Application-Code-from-JSON-Sample-D
从JSON示例数据生成Web应用程序代码相关推荐
- 投票功能+代码+java_JSP实现的简单Web投票程序代码
这篇文章主要介绍了JSP实现的简单Web投票程序代码,较为详细的分析了JSP实现投票功能的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了JSP实现的简单Web投票程序. ...
- usagestatsmanager获取正在运行应用_用Python构建数据科学Web应用程序
在本文中,我将向你展示如何使用streamlit python库快速构建一个简单的数据驱动web应用程序,只需几行代码. 作为一名数据科学家或机器学习工程师,能够部署我们的数据科学项目是很重要的.传统 ...
- python 搭建web应用程序_用Python构建数据科学Web应用程序
作者|Chanin Nantasenamat 编译|VK 来源|Towards Data Science 在本文中,我将向你展示如何使用streamlit python库快速构建一个简单的数据驱动we ...
- javascript原型_使用JavaScript的示例报告卡Web应用程序原型
javascript原型 Hi! At times, beginners always find it hard getting the application of the theory they ...
- java简单投票系统_JSP实现的简单Web投票程序代码
本文实例讲述了JSP实现的简单Web投票程序.分享给大家供大家参考.具体如下: 这里使用文本文件作为数据存储的投票系统. 1. vote.java: package vote; import java ...
- datatables 一行数据生成两行_一行代码搞定分组回归
写 在前面 在目前为止所有小伙伴们向大猫请教过的R问题中,大猫总结了最常遇见同时也是比较难的三个问题,分别是(1)事件研究法:(2)分组回归:(3)滚动回归.事件研究法在第一期中已经讲述,本期我们就来 ...
- IEEE754数据生成 (附C++代码)
说明 由于手头的FPGA项目需要生成三角函数的表,所以有如下程序. 代码是很久以前写的,因为方向比较冷,觉得还是有一些价值,就搬过来了. 代码 #include <iostream> #i ...
- mysql导出数据 程序_MySQL数据导出与导入程序代码
Mysql Manual讲得很清楚.实现数据备份有两种方法,一是直接copy mysql data目录的数据文件.第二种就是mysqldmup. 第一方法,没什么可言,也就是写写脚本或是放置ftp上面 ...
- JSON格式数据示例操作
json示例数据: {"test1": "wx9fdb8ble7ce3c68f","test2": "123456789" ...
最新文章
- [转载] FatFs模块功能配置选项
- git push 推送大文件失败的处理办法
- Samba服务器的安装配置【十全十美】
- 关于Tomcat如何处理Open Redirect的问题
- JavaFX图表(四)之面积图
- MySQL 取得两个时间相差的分钟数 及 常用时间函数
- 零拷贝技术在 Java 中为何这么牛?
- Intellij IDEA安装与使用,完整详细。
- 如何使得OCX控件能响应PreTranslateMessage消息?
- 继承的作用是什么?看看下面这些例子吧!
- 一篇文章讲清楚人工智能、机器学习和深度学习的区别与联系
- 异常处理 Exceptions
- Sublime Text 3.1 编辑管理工程(项目)
- 【实习周报】2019年4月 前端开发实习工作周报汇总
- WebStorm中使用Git同步代码到Github
- 意大利或将立法 禁止中小学校园携带手机
- 100倍分析性能提升 清华冠军团队用图数据震惊世界
- php 禁止抓取,服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站
- git push 拒绝连接_git push被拒绝的处理方式
- C++ | shared_ptr与weak_ptr
热门文章
- DPVS_吊打面试官的项目——DPVS
- 电力拖动自动控制系统_系主任带你看专业 | 电气工程及其自动化、电子科学与技术、信息工程、自动化,优质就业、超高考研、竞赛获奖都在这里……...
- 前端实现3d效果_前端动画效果实现的简单比较
- 设计灵感|展览海报如何排版?好的作品给你灵感
- Titlemizer 随机相关的标题生成器插件
- UI设计素材|app表单模板,临摹学习,有效提高设计水平!
- 上传自定义日志_ZKEYS系统重磅更新,新增后台数据库备份、主控运行日志管理等新功能!...
- insert into 时间_值得花点时间背记的out of有关短语
- Python字典中 get() 函数的使用
- python安装环境配置