ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

从JSON示例数据生成Web应用程序代码

2021-10-11 22:31:28  阅读:216  来源: 互联网

标签:Web return BuiltInType get 示例 程序代码 property public BootGen


目录

介绍

它是如何工作的?

创建数据模型

呈现代码

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

这是处理从JSON输入构建数据模型并呈现Scriban模板的核心库。

框架插件

对不同框架的支持是作为插件实现的。目前,实现了以下插件:

一个框架插件包含:

  • 一堆Scriban模板
  • 一些静态文件(基本上是给定框架的空项目)
  • 一个配置文件

我们尽最大努力保持插件界面干净,以便在未来轻松实现对其他框架的支持。

Web应用程序

这是部署到bootgen.com的Web应用程序。一种使用BootGen的便捷方式。

https://www.codeproject.com/Tips/5309774/Generating-Web-Application-Code-from-JSON-Sample-D

标签:Web,return,BuiltInType,get,示例,程序代码,property,public,BootGen
来源: https://blog.csdn.net/mzl87/article/details/120713070

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有