fabiomattei/uglyduckling

使用json结构创建Web应用的框架

0.3.0 2024-07-07 14:25 UTC

This package is auto-updated.

Last update: 2024-10-01 20:58:04 UTC


README

文档

如果您想了解项目的更完整描述,请查看文档网站:https://www.uddocs.com/

演示

这个演示展示了库的主要功能。

最好的代码是你不需要写的代码

我编写这段代码是为了避免重复编写相同的内容。我多年来一直在编写Web应用。那些应用做什么?从表单中获取数据,将数据保存到数据库中,然后在另一个表单中编辑这些数据,并在表格或图表中显示这些数据,有时还会删除这些数据(老实说,不经常)。

我一次又一次地这样做,一个表接一个表,ORM接ORM,MVC接MVC。

我感觉迷茫和无聊。我工作非常努力,但取得的成就很小。

我学习了许多框架来加快我的工作流程,我阅读了很多书籍:新技术,如此令人兴奋!

然后我开始注意到我的工作是可以重复的,而那些框架使我慢了下来。

使用MVC方法,您要为应用程序进行的每个更改至少需要打开3个文件。

所以我开始想:我真的需要什么来制作一个包含从数据库获取数据的表格?答案是:我需要执行一个SQL查询,我需要定义表格的结构,并将查询结果放在表格上。仅此而已。我只需要这三样东西,不需要更多。

我把所有这些信息放在一个json文件中,这就是结果

{
  "query": {
    "sql": "select id, name, amount, duedate FROM requestv1;"
  },
  "table": {
    "title": "My table",
    "fields": [
      {"headline": "Name", "sqlfield": "name"},
      {"headline": "Amount", "sqlfield": "amount"},
      {"headline": "Due date", "sqlfield": "duedate"}
    ]
  }
}

没有ORM,没有MVC,一个不干涉我的框架。

我知道我使用了SQL而不是ORM,但我喜欢SQL!SQL已经很多年没有变化了,这意味着它有效!老了也不算什么坏事!

我给表格起了一个标题,并在字段数组中定义了标题和从查询中获取的sql字段,以填充表格的单元格。你解决过多少次这样的简单问题?你曾经写过更少的代码吗?如果是这样,请告诉我!

我知道你在想什么:这不够通用,如果需要执行计算或泛化某些逻辑或做更复杂的事情怎么办?好吧,你总是可以回到老方法,编写控制器和视图,可能是由部分组成的,连接ORM,写下你的模型,等等...

但,让我们直言不讳,你真的需要它吗?你多久做一次这样的事情?我经常发现自己只是用一条查询的结果填充一个表格,可能还涉及几个连接的表。

让我们添加一些链接

如果我需要在表格中添加到一些支持操作的链接怎么办?我在json格式中也定义了这一点。

{
  "query": {
    "sql": "select id, name, amount, duedate FROM requestv1;"
  },
  "table": {
    "title": "My table",
    "fields": [
      {"headline": "Name", "sqlfield": "name"},
      {"headline": "Amount", "sqlfield": "amount"},
      {"headline": "Due date", "sqlfield": "duedate"}
    ],
    "actions": [
      {"label": "Info", "resource": "inforequest", "parameters":[{"name": "id", "sqlfield": "id"}] },
      {"label": "Edit", "resource": "formrequest", "parameters":[{"name": "id", "sqlfield": "id"}] },
      {"label": "Delete", "resource": "deletereport", "parameters":[{"name": "id", "sqlfield": "id"}] }
    ]
  }
}

一个链接由一个标签(用户需要看到的点击内容)、一个操作和一些可能来自SQL查询的参数定义。

如果您想知道什么是资源,它是一个索引,用于在系统中查找特定的json配置文件,就像这个一样。有用于表单、PDF导出、数据图表等的资源。如果您需要更多,您可以始终定义一个新的模板,毕竞这是一个开源项目。

让我们完成这个json文件

为了完成文件,有一些事情要做。我们需要给它一个名字,这样我们才能在所有资源中找到它。我们需要添加一些元数据,以防未来需要添加更多功能。

系统支持允许组访问特定资源的概念,这解释了"allowedgroups"数组。

这个文件中有一个get部分,它之所以存在,是因为所有这些配置都是针对GET请求的。

{
  "name": "requesttablev1",
  "metadata": { "type":"table", "version": "1" },
  "allowedgroups": [ "administrationgroup", "teachergroup", "managergroup" ],
  "get": {
    "request": {
      "parameters": []
    },
    "query": {
      "sql": "select id, name, amount, duedate FROM requestv1;"
    },
    "table": {
      "title": "My table",
      "fields": [
        {"headline": "Name", "sqlfield": "name"},
        {"headline": "Amount", "sqlfield": "amount"},
        {"headline": "Due date", "sqlfield": "duedate"}
      ],
      "actions": [
        {"label": "Info", "resource": "inforequest", "parameters":[{"name": "id", "sqlfield": "id"}] },
        {"label": "Edit", "resource": "formrequest", "parameters":[{"name": "id", "sqlfield": "id"}] },
        {"label": "Delete", "resource": "deletereport", "parameters":[{"name": "id", "sqlfield": "id"}] }
      ]
    }
  }
}

如果您可以使用标准模板,您只需将所需的全部资源填充到src/Custom文件夹中,就可以制作整个应用程序。打开该文件夹,看看其他资源是如何定义的。