lsFusion:开源快速应用程序开发平台


lsFusion 是基于第五代同名编程语言的免费开源信息系统开发平台。

与传统方法相比,lsFusion 的增量计算、函数级、反应式和基于事件的编程、编写和遍历所有函数值的能力、多重继承和多态性、无封装以及其他许多全新的理念大大提高了所创建系统的开发速度、质量和性能。

该平台为已在运行的系统提供一整套管理工具:

  • 解释器(执行 lsFusion 代码)、
  • 进程监控器(接收正在运行的进程的详细信息,如调用开始时间、堆栈、用户等)、
  • 调度器(执行定期或计划的操作)、
  • 剖析器(测量所有/指定用户执行的所有操作的性能,如建立调用图、共享应用程序服务器和用户的时间等)。)、
  • 调度器(执行定期或计划的操作)、
  • 分析器(测量所有用户/指定用户执行的所有操作的性能,例如建立调用图、共享应用服务器和数据库服务器之间的时间等)、
  • 消息(用于内部通知/与系统中的用户通信)以及
  • 大量日志(连接、错误等)。

lsFusion是一种描述 lsFusion模块的编程语言。
每个模块由一系列语句组成,分为模块和模块体。
头可以包含四个特殊语句:MODULE、REQUIRE和PRIORITY,NAMESPACE

// Module header模块头
MODULE LanguageExample;

REQUIRE System;

NAMESPACE Example;

// Module body模块体

// Classes declaration 类
CLASS Employee;
CLASS Company;

// Properties declaration 属性
name(employee) = DATA BPSTRING[100](Employee);
age(employee) = DATA INTEGER(Employee);
company(employee) = DATA Company(Employee);

name(company) = DATA BPSTRING[100](Company);

// Form declaration 对象
FORM employeeForm
    OBJECTS e = Employee
    PROPERTIES(e) name, age, company
;

// Adding a form to the navigator
NAVIGATOR {
    NEW employeeForm;
}

主要特点
单一数据语言
该平台摆脱了对象与关系语义之间的鸿沟,因此开发人员无需经常在 "快速 "的 SQL 查询和 "便捷 "的命令式语言之间做出选择。这两种方法几乎是完全抽象和统一的。每个开发人员始终使用单一范式处理数据,而平台则负责如何以及在哪里完成所有剩余工作。

无 ORM,有 SQL
当某个操作需要同时对多个对象进行数据处理时,平台会尽可能通过单个请求(即同时对所有对象)在数据库服务器上进行处理。在这种情况下,会根据数据库服务器的特性尽可能优化生成的所有查询。

绝对反应性
一旦使用的数据发生变化,所有计算数据都会自动更新。无论您是在显示交互式表单,还是在执行的操作中简单访问数据,这一规则始终适用。

动态物理模型
该平台允许您随时将系统中的任何现有指标实体化,添加新表或删除现有表,或更改实体化指标在这些表中的位置。

对任何数据的限制
该平台允许您为任何数据(甚至是计算数据)的值创建限制条件,而且所有此类限制条件(与事件一样)都是全局性的,因此没有经验的用户或开发人员无法通过无效事务绕过这些限制条件。

高效的客户端-服务器通信
物理层面上的客户端-服务器通信最大限度地减少了同步往返调用(即每个用户操作都会导致单个(通常是异步的)请求/响应对)。桌面客户端还会对所有传输的数据进行存档和加密(必要时)。在客户端与服务器通信期间(桌面客户端通过 TCP/IP 或网络客户端通过 HTTP),平台提供交付保证--它会重新发送任何丢失的请求,并确保按正确的顺序处理。所有这些功能都有助于平台在低带宽、不稳定或高延迟的通信通道上高效运行。

三层架构
该平台在应用服务器上执行系统逻辑的命令式部分(即与数据更改有关的所有内容),在数据库服务器上执行声明式部分(即与数据计算有关的所有内容)。这种分离简化了所开发系统的扩展,并由于这些服务器上的工作负载性质不同而增强了容错能力(例如,在应用服务器上使用交换比在数据库服务器上危险得多)。

一切如代码
从事件到表单设计,系统的所有元素都是用 lsFusion 语言编写的,并存储在普通文本文件中(没有任何结构未知的共享存储库)。这样,在处理项目时,就可以使用流行的版本控制系统(Git、Subversion)和项目构建工具(集成开发环境中的 Maven)。此外,这种方法还简化了对所开发系统的支持和部署--您可以使用普通文本编辑器查看并在必要时快速修改逻辑,还可以通过文件名和该文件中的行号轻松识别系统中的任何元素。

lsFusion 编程语言

多态性和聚合
支持继承(包括多重继承)和多态(包括多重多态)。如果继承对你来说还不够,该平台还提供了聚合机制,与继承一起,你可以实现几乎所有的多态逻辑。

模块和扩展
扩展技术允许开发人员在另一个模块中扩展一个模块的功能(例如,他们可以修改在另一个模块中创建的表单或类)。这种机制使您创建的解决方案更加模块化。

元编程
如果你想创建自己的高级运算符,或者你只是不知道如何将逻辑通用化,但又想重复使用它,lsFusion 完全支持服务器端和集成开发环境的自动代码生成。


Java 与 SQL 集成

国际化

易于使用的集成开发环境
基于 Intellij IDEA 的 IDE 具有开发人员所需的一切功能:用途搜索、代码/错误高亮显示、智能自动完成、快速跳转到声明、类结构、元素重命名、使用树、数据更改断点、调试器等。

在线演示
1、物料管理(MM )
演示位于https://demo.lsfusion.org/mm
用户名:guest
密码:guest
GitHub 源代码位于此处

2、分数
演示位于https://demo.lsfusion.org/hockeystats
用户名:guest
密码:guest
GitHub 源代码位于此处

设计特点
1、领域逻辑
属性是业务逻辑的基本概念,负责存储和计算数据。

属性的一个重要特征是它们不会以任何方式更改系统中的数据 - 为此,平台有操作action

Action操作回答了“做什么”的问题,但没有回答“何时做”的问题。为了定义这样的时刻,平台提供了事件

通常,业务逻辑不允许任何数据更改:仅允许遵循某些规则的更改。平台使用约束来定义这些规则。

因此,业务逻辑所有要素的汇总表如下:

Properties    What to store and calculate  
Actions    What to do    
Events    When to do    
Constraints    What can be done  

2、物理模型
物理模型由三部分组成:

  1. Development: 包括与开发过程相关的所有内容。
  2. 执行:包括与系统性能改进相关的所有内容。
  3. 管理:包括与已运行系统上的操作相关的所有内容。

IDE集成开发环境
启动IDEA并选择Create New Project,或者当IDEA已打开时,File > New > Project从菜单中选择。

选择项目类型lsFusion。确保已设置 JDK,并选择带有 的库的链接lsFusion(使用自动安装Download时,会自动设置该链接;否则,单击或选择之前下载的库Create),然后单击Next。

填写项目名称和源文件存储的目录。必要时调整数据库和应用服务器的连接参数和密码。单击Create。

所有用lsFusion编写的源代码默认存储在src/main/lsfusion.
要添加新模块,请右键单击相应的文件夹并New > lsFusion Module从菜单中选择:

当您创建新项目时,默认情况下还会创建服务器启动配置。Run -> Run 'Run lsFusion server'

如果平台嵌入到现有项目中(例如,通过 Maven进行 Maven 项目),您可能需要手动为应用程序创建服务器启动配置。

要编译包含开发的代码和应用程​​序服务器本身的单个 JAR 文件,您可以使用以下指南。结果 JAR 文件(工件)可用于在生产服务器上安装应用程序,如将应用程序服务器安装为服务部分中所述。

项目点击标题