乐趣区

关于php:GWA2Python吉娃兔改进兼答为何需要软件开发框架

在 2022 年 9 月份的更新中,咱们公布了 GWA2 in Python 的初始预览版本。目前该版本正在一直功能完善与改良中,行将公布生产就绪版本。在之前的 Blog 中,咱们绘制了 GWA2 Python 中的面向对象的实现,参考下图。GWA2 in Python 的类与对象的继承关系(https://ufqi.com/blog/gwa2-in…)。

GWA2 in Python 在上图中,实体对象类 FinanceFund 在拜访路由控制器的 ctrl/financefund 中被调用。实体类 FinanceFund 继承基类 WebApp, 基类 WebApp 实现了根底接口 WebInterfance, 而基类接口 WebInterface 则继承了 Python 起因的形象根底类 ABC(Abstract Base Class)。如此以来,从 Python 语言视角残缺地实现了类与对象的继承关系,ABC –> WebInterface –> WebApp –> FinanceFund –> FinanceFundBase …这次咱们以一个从数据库中读取数据记录的实例来回顾下面这些类与对象的关系,并尝试答复为何要在软件开发过程中应用软件开发框架。下图中,GWA2 in Python 数据库读取及数据流转,

GWA2 Python 数据库读取及数据流在路由控制器 ctrl/financefund 中,实例化的 FinanceFund 的对象 ffund 调用放 ffund.getInfo 试图拜访数据库中的一条数据记录;ffund.getInfo 进一步地调用父类 WebApp.getBy;WebApp.getBy 依据调用参数,辨认出是默认从数据库中读取;WebApp.getBy 将申请分发给 Dba, Dba 被激活并初始化——应用哪个连贯服务,应用哪种数据库驱动接口;Dba.select 随之被调用;依据所选连贯及数据库驱动接口程序进行下一步;MySql 数据服务及接口程序被抉择并调用,MySql.readSingle 被调用;MySql.readSingle 触发内置的 mysql.connector 相干的办法读取数据并返回:数据按之前的流程逐渐向上程序返回,直至最终到达 路由控制器 ctrl/financefund 那里。这里令人不能直观而形象地了解的是,为何要通过这么繁琐的过程进行数据记录的读取?实际上,在路由控制器 ctrl.financefund 中间接引入 mysql.connector 并依据相干指令语句实现,填入服务主机信息,创立连贯,组装 SQL,递交查问,解析数据,返回数据…. 这样也是能够的,间接写更容易了解,也可能速度上因为少了类与对象的封装、数据流转步骤而略微快一些。

这实际上要答复为何在软件开发过程中要应用开发框架。简而言之,软件开发框架是一种代码开发、组织与治理的办法。软件开发框架是以极大地提高软件开发效率、运行效率,同时升高软件维护老本、总持有老本为指标的。在开发层面,代码须要复用,同样性能的代码,只需写一次即可在整个软件中调用;在组织层面,应用面向对象的形式,尽可能地映射残缺的物理世界的分类与层级:在运行层面,提供便捷的配置,可承受的安全性、强壮与鲁棒性:在保护扩大层面,可不便纵向降级优化,可便当地横向扩大;…..

为了更好地开发软件、组织和管理软件代码,咱们须要遵循肯定的开发标准和规定,这些标准和规定,以一种成套系的模式出现进去的,就是软件开发框架。比方,当咱们能够在 ctrl/financefund 路由控制器中写数据库连贯的账户信息时,咱们不那么做,是因为这些敏感信息不应该散落和散布在各个路由控制器中,既有安全隐患,也不利于集中统一治理,如果将来某一天须要更换 / 切换某个数据库的账号信息时,不能一一文件的一一进行修改。

咱们不在每个路由控制器中建设对数据库的连贯,还因为这些代码与其余路由控制器是反复的,不应该同样的代码反复一直的复制着写。同时,咱们还要思考数据库连贯可能要有连贯的复用,连接池的治理与调度等问题。
再次,咱们不在路由控制器中写入建设数据库的连贯,还要思考在将来某一天咱们切换某个数据库连贯时,须要批改每一个路由控制器文件,这是一种繁琐且容易出错的过程,应该竭力地防止。第四,咱们还要思考,如果将来面对变动,咱们从 A 类数据库切换到 B 类数据库时,程序是否可能失常、无缝地运行上来。

反之,如果咱们提前标准了这些开发行为,提前预留和相应的操作空间,则下面的任何层面的改变,对上游依赖不形成影响。咱们能够在配置文件中,轻易地批改数据库账号信息,上游所有的程序无需做任何改变;咱们能够在数据库连贯中,轻易地复用数据库连贯,进行复用,甚至多个数据库进行轮询;咱们能够轻易地的将同类的 A 数据库切换为 A 类另外一个数据库;咱们能够轻易地地将 A 类数据库切换为 B 类数据库;….

这些绝对残缺、欠缺的高可用、可扩大、可降级的设计思维及相应的软件代码的实现,形成了软件开发框架。读取数据库是最罕用的场景之一,实际上,GWA2 在设计和代码实现中,岂但思考到数据库,还思考到比方缓存、文件、网络等各种内部资源的调用。针对这些内部资源的应用,都遵循了与数据库读取类似的逻辑,下图是 GWA2 内置缓存的解决逻辑与数据流转过程。

GWA2 内置缓存控制器(https://ufqi.com/blog/gwa2-ja…)。

GWA2 built-in CacheGWA2 反对更多数据库连贯控制器(https://ufqi.com/blog/gwa2-fi…)。

GWA2 with multiple databasesGWA2 反对更多文件系统及驱动的接入。

GWA2 Multiple File Systems 从上述形容能够看到,针对各种内部资源,GWA2 在操作过程中,某个继承了根底父类 WebApp 的实体对象类在运行中,读取办法 WebApp.geyBy 依据参数决定调用哪种内部资源,而后相应地内部资源管理器被激活调用,如 Dba, Cachea, Filea 等等。当资源管理器被激活调用时,须要辨认应用哪种驱动程序连贯到那个主机服务下来。相应的资源驱动程序被调用,通过对立的接口办法进行理论的资源读取。与读取办法相似,根底父类 WebApp.setBy 则是将相应的数据写入到内部资源中去。全文首发地址:https://ufqi.com/blog/gwa2pyt…,-R/V2SX


GWA2 吉娃兔 -GWA2 吉娃兔 是”通用网络应用架构 (General Web Application Architecture, https://ufqi.com/dev/gwa2/)”,基于 -GWA2 能够轻便构建各种网络应用程序, 包含简单的在线购物商城、在线医疗、在线教育、游览交易平台、社群或者社交网站和新闻资讯网站等,也包含各种企事业单位网上门户,在线交互及服务作业系统等. 还能够包含为 NativeApp 做服务器端反对, 甚至是 WebApp 的全副.-GWA2 是为数不多的反对跨开发语言的利用框架,目前反对 -Java, -PHP, -Perl, -Aspx and -Python .
-GWA2 is a“General Web Application Architecture”and based on -GWA2 developers can easily build a variety of network applications,including complex online shopping malls, online medical services, online teaching, travel trading platforms, community or social networking sites and news information sites, etc.Also the applications include various online portals of enterprises and institutions, online interaction and service operations systems.Moreover it contains server-side support for Native App, or even all of the WebApp.-GWA2 is one of the web frameworks which provide cross-language support for -Java, -PHP, -Perl, -Aspx and -Python at present.
-GWA2 is E.A.S.Y Easy Along, Swift Yield 轻松启动, 疾速产出.

退出移动版