在2022年9月的更新中,我们发布了GWA2的Python初始预览版。该版本目前正在不断完善完善中,即将发布可用于生产的版本。在之前的博客中,我们绘制了GWA2的Python面向对象实现,参考下图。Python中GWA2的类和对象的继承关系(https://ufqi.com/blog/gwa2-in...)。GWA2inPython上图中在访问路由控制器的ctrl/financefund中调用了实体对象类FinanceFund。实体类FinanceFund继承了基类WebApp,基类WebApp实现了基础接口WebInterfance,而基类接口WebInterface由于Python原因继承了抽象基类ABC(AbstractBaseClass)。这样,从Python语言的角度,类和对象的继承关系就完全实现了,ABC–>WebInterface–>WebApp–>FinanceFund–>FinanceFundBase……这次我们以读取数据记录为例回顾一下上面的内容从数据库类和对象的关系出发,尝试回答在软件开发过程中为什么要使用软件开发框架。下图中GWA2在Python数据库读取和数据流转,GWA2Python数据库读取和数据流转在路由控制器ctrl/financefund中,实例化FinanceFund对象ffund调用ffund.getInfo尝试访问数据库中的一条数据Record;ffund.getInfo进一步调用父类WebApp.getBy;WebApp.getBy根据调用参数识别默认从数据库中读取;WebApp.getBy将请求分发给Dba,Dba被激活和初始化——使用哪个连接Service,使用哪个数据库驱动接口;相应地调用Dba.select;根据选择的连接和数据库驱动接口程序进行下一步;选择调用MySql数据服务和接口程序,调用MySql.readSingle;MySql.readSingle触发内置的mysql.connector相关方法读取数据并返回:数据按照前面的流程一步步返回,直到最终到达路由控制器ctrl/financefund。这里让人无法直观形象地理解的是,为什么要通过如此繁琐的过程来读取数据记录?其实就是直接将mysql.connector导入路由控制器ctrl.financefund按照相关指令语句完成,填写服务主机信息,创建连接,拼装SQL,提交查询,解析数据,返回data...这个也是可以的,直接写比较容易理解,速度可能会稍微快一些,因为少了类和对象的封装以及数据流转的步骤。这实际上回答了为什么在软件开发过程中要使用开发框架。简而言之,软件开发框架是一种代码开发、组织和管理的方法。该软件开发框架旨在大幅提高软件开发和运行效率,同时降低软件维护成本和总体拥有成本。在开发层面,代码需要复用,相同功能的代码写一次就可以在整个软件中调用;在组织层面,尽可能使用面向对象的方式映射完整物理世界的分类和层次结构:在操作层面,提供便捷的配置、可接受的安全性、健壮性和健壮性:在维护层面和扩展,便于纵向升级和优化,便于横向扩展;...为了更好的软件开发、组织和管理,对于软件代码,我们需要遵循一定的开发规范和规则。这些规范和规则以一个完整的体系的形式呈现出来,这就是软件开发框架。例如,当我们可以在ctrl/financefund路由控制器中写入数据库连接的账户信息时,我们不这样做,因为这些敏感信息不应该分散分布在各个路由控制器中,既有安全隐患,又不安全。有利于集中统一管理。如果以后需要更换/切换某个数据库的账号信息,无法一一更正。我们并没有在每个路由控制器中建立与数据库的连接,因为这些代码与其他路由控制器是重复的,所以不应该重复复制和编写相同的代码。同时,我们还需要考虑数据库连接可能的连接复用、连接池的管理和调度等问题。同样,我们不在路由控制器中编写建立数据库的连接。我们以后切换某个数据库连接的时候也需要修改各个路由控制器文件。这是一个繁琐且容易出错的过程。应尽量避免。第四,我们还需要考虑在未来面对变化时,从A类数据库切换到B类数据库时,程序是否能够正常无缝运行。相反,如果我们提前规范这些开发行为,并提前预留和相应的运行空间,上面层级的任何变化都不会影响到下游的依赖。我们可以很方便的修改配置文件中的数据库账号信息,所有下游程序不需要做任何改动;我们可以方便地在数据库连接中复用数据库连接,进行多路复用,甚至轮询多个数据库;我们很容易将同类型的A数据库切换到另一个A类数据库;我们可以很方便的将A类数据库切换到B类数据库;...这些都是比较完整和完整的高可用、可扩展、可升级的设计思想的实现和相应的软件代码,构成了一个软件开发框架。读取数据库是最常用的场景之一。事实上,在GWA2的设计和代码实现中,不仅考虑了数据库,还考虑了对缓存、文件、网络等各种外部资源的调用。这些外部资源的使用遵循类似于数据库读取的逻辑。下图展示了GWA2内置缓存的处理逻辑和数据流转过程。GWA2内置缓存控制器(https://ufqi.com/blog/gwa2-ja...)。GWA2内置CacheGWA2支持更多的数据库连接控制器(https://ufqi.com/blog/gwa2-fi...)。具有多个数据库的GWA2GWA2支持访问更多的文件系统和驱动程序。GWA2多文件系统从上面的描述我们可以看出,对于各种外部资源,在GWA2运行过程中,当一个继承了基础父类WebApp的实体对象类运行时,由读取方法WebApp.geyBy决定调用哪一个根据参数。一个外部资源,然后激活并调用相应的外部资源管理器,如Dba、Cachea、Filea等。调用资源管理器时,它需要确定使用哪个驱动程序连接到该主机服务。调用相应的资源驱动,通过统一的接口方法进行实际的资源读取。与read方法类似,基础父类WebApp.setBy将相应的数据写入外部资源。全文起始地址:https://ufqi.com/blog/gwa2pyt...,-R/V2SXGWA2ChiwaRabbit-GWA2ChiwaRabbitis"GeneralWebApplicationArchitecture,https://ufqi.com/dev/gwa2/)",基于-GWA2,可以轻松构建各种网络应用,包括复杂的网上商城、网上医疗、网上教育、旅游交易平台、社区或社交网站和新闻资讯网站等。各种企业在线门户和机构、在线交互和服务操作系统等也可以包括服务器端对NativeApp的支持,甚至是对WebApp的全部支持。-GWA2是为数不多的支持跨开发语言的应用程序框架之一。目前支持-Java、-PHP、-Perl、-Aspx和-Python。-GWA2是一个“通用Web应用架构”,基于-GWA2开发者可以轻松构建各种网络应用,包括复杂的网上商城、在线医疗服务、在线教学、旅游交易平台、社区或社交网站、新闻资讯网站等。应用还包括企事业单位的各种在线门户网站、在线互动和服务运营系统。此外,它还包含服务器端支持,甚至用于NativeApp,WebApp的全部。-GWA2是为-Jav提供跨语言支持的web框架之一a,-PHP,-Perl,-Aspx和-Python目前。-GWA2是E.A.S.YEasyAlong,SwiftYield容易启动,快速输出。
