目录

介绍

它是如何工作的?

创建数据模型

呈现代码

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应用程序代码相关推荐

  1. 投票功能+代码+java_JSP实现的简单Web投票程序代码

    这篇文章主要介绍了JSP实现的简单Web投票程序代码,较为详细的分析了JSP实现投票功能的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了JSP实现的简单Web投票程序. ...

  2. usagestatsmanager获取正在运行应用_用Python构建数据科学Web应用程序

    在本文中,我将向你展示如何使用streamlit python库快速构建一个简单的数据驱动web应用程序,只需几行代码. 作为一名数据科学家或机器学习工程师,能够部署我们的数据科学项目是很重要的.传统 ...

  3. python 搭建web应用程序_用Python构建数据科学Web应用程序

    作者|Chanin Nantasenamat 编译|VK 来源|Towards Data Science 在本文中,我将向你展示如何使用streamlit python库快速构建一个简单的数据驱动we ...

  4. javascript原型_使用JavaScript的示例报告卡Web应用程序原型

    javascript原型 Hi! At times, beginners always find it hard getting the application of the theory they ...

  5. java简单投票系统_JSP实现的简单Web投票程序代码

    本文实例讲述了JSP实现的简单Web投票程序.分享给大家供大家参考.具体如下: 这里使用文本文件作为数据存储的投票系统. 1. vote.java: package vote; import java ...

  6. datatables 一行数据生成两行_一行代码搞定分组回归

    写 在前面 在目前为止所有小伙伴们向大猫请教过的R问题中,大猫总结了最常遇见同时也是比较难的三个问题,分别是(1)事件研究法:(2)分组回归:(3)滚动回归.事件研究法在第一期中已经讲述,本期我们就来 ...

  7. IEEE754数据生成 (附C++代码)

    说明 由于手头的FPGA项目需要生成三角函数的表,所以有如下程序. 代码是很久以前写的,因为方向比较冷,觉得还是有一些价值,就搬过来了. 代码 #include <iostream> #i ...

  8. mysql导出数据 程序_MySQL数据导出与导入程序代码

    Mysql Manual讲得很清楚.实现数据备份有两种方法,一是直接copy mysql data目录的数据文件.第二种就是mysqldmup. 第一方法,没什么可言,也就是写写脚本或是放置ftp上面 ...

  9. JSON格式数据示例操作

    json示例数据: {"test1": "wx9fdb8ble7ce3c68f","test2": "123456789" ...

最新文章

  1. [转载] FatFs模块功能配置选项
  2. git push 推送大文件失败的处理办法
  3. Samba服务器的安装配置【十全十美】
  4. 关于Tomcat如何处理Open Redirect的问题
  5. JavaFX图表(四)之面积图
  6. MySQL 取得两个时间相差的分钟数 及 常用时间函数
  7. 零拷贝技术在 Java 中为何这么牛?
  8. Intellij IDEA安装与使用,完整详细。
  9. 如何使得OCX控件能响应PreTranslateMessage消息?
  10. 继承的作用是什么?看看下面这些例子吧!
  11. 一篇文章讲清楚人工智能、机器学习和深度学习的区别与联系
  12. 异常处理 Exceptions
  13. Sublime Text 3.1 编辑管理工程(项目)
  14. 【实习周报】2019年4月 前端开发实习工作周报汇总
  15. WebStorm中使用Git同步代码到Github
  16. 意大利或将立法 禁止中小学校园携带手机
  17. 100倍分析性能提升 清华冠军团队用图数据震惊世界
  18. php 禁止抓取,服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站
  19. git push 拒绝连接_git push被拒绝的处理方式
  20. C++ | shared_ptr与weak_ptr

热门文章

  1. DPVS_吊打面试官的项目——DPVS
  2. 电力拖动自动控制系统_系主任带你看专业 | 电气工程及其自动化、电子科学与技术、信息工程、自动化,优质就业、超高考研、竞赛获奖都在这里……...
  3. 前端实现3d效果_前端动画效果实现的简单比较
  4. 设计灵感|展览海报如何排版?好的作品给你灵感
  5. Titlemizer 随机相关的标题生成器插件
  6. UI设计素材|app表单模板,临摹学习,有效提高设计水平!
  7. 上传自定义日志_ZKEYS系统重磅更新,新增后台数据库备份、主控运行日志管理等新功能!...
  8. insert into 时间_值得花点时间背记的out of有关短语
  9. Python字典中 get() 函数的使用
  10. python安装环境配置