从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

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

框架插件

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

一个框架插件包含:

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

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

Web应用程序

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

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

上一篇:Mac catalyst 使用iOS的音频采集


下一篇:53.qt quick-自定义三态按钮、自定义图标下拉列表框