Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结

时间:2023-12-13 18:40:38

Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结

1. Sql语言应该得到更大的范围的应用,1

1.1. 在小型系统项目中,很适合存储过程写业务逻辑2

1.2. 大型项目或产品型项目(有换数据库需求的),大规模使用js编写业务逻辑,把后端大力简化为一个rest接口的数据库驱动2

1.3. 小部分模块,重视安全的,使用后端业务逻辑模式2

1.4. 貌似比较理想的模式 前端h5(ui界面)+js(业务逻辑)+rest(通讯层)+ sql(业务逻辑)+数据库(存储)2

1.5. Oo知识图谱2

2. 基本的oo机制3

2.1. 命名空间namespace  package机制3

2.2. 原型机制 vs Class类模板机制4

2.3. 定义class Class模板就使用表来实现啦4

2.4. 绑定class方法 getName建立一个com.attilax.city/city_getName函数5

3. 新建对象,并调用对象方法getName5

3.1. 创建一个obj, 设置对象属性5

3.2. 获得对象引用5

3.3. 调用对象方法,有点类似于反射,使用类方法调用对象标识和其他参数6

4. 对象的gc6

5. 测试主函数main6

6. 参考资料6

测试数据库为mysql ,版本5.6 ,ide工具为navicate10.1

1. Sql语言应该得到更大的范围的应用,

但是sql是个dsl语言,函数式语言为主,编程抽象单位以函数(存储过程)为主。。映射到oo稍微有点麻烦。。模拟实现。。

优点,毕竟sql是个4gl语言,比起java c#这类3gl,高了整整一个语言代差。原则上可以更加的简洁化,提升可读性。。

灵活性,热部署

缺点:不适合换数据库的场合。如果需要换数据库,需要翻译到目标数据库的sql语言。

需要很高性能的场合可能不适用。

Sql貌似没有很好的ide和调试工具。

1.1. 在小型系统项目中,很适合存储过程写业务逻辑

1.2. 大型项目或产品型项目(有换数据库需求的),大规模使用js编写业务逻辑,把后端大力简化为一个rest接口的数据库驱动

1.3. 小部分模块,重视安全的,使用后端业务逻辑模式

1.4. 貌似比较理想的模式 前端h5(ui界面)+js(业务逻辑)+rest(通讯层)+ sql(业务逻辑)+数据库(存储)

1.5. Oo知识图谱

类与对象实现

oo三大特性

类与对象实现

solid原则

类与对象实现

对象实现

类与对象实现

class模板

类与对象实现

方法重载

类与对象实现

属性读写

类与对象实现

构造函数

类与对象实现

抽象类和

类与对象实现

抽象方法

类与对象实现

单例

类与对象实现

实例

类与对象实现

接口用interface

类与对象实现

is-a has-a

类与对象实现

对象持久性(object persistence

类与对象实现

访问方法(accessor method)和

类与对象实现

设置方法(mutator method)

类与对象实现

动态绑定(dynamic binding

类与对象实现

消息

类与对象实现

覆盖(Overriding

类与对象实现

dock type

类与对象实现

基于原型

类与对象实现

封装

类与对象实现

多态

类与对象实现

继承

类与对象实现

多继承

类与对象实现

动态对象

类与对象实现

类加载

类与对象实现

程序集加载

自动语句加载

类与对象实现

程序集加载

反射api加载

类与对象实现

程序集加载

字节数组加载

类与对象实现

程序集加载

外部文件加载

类与对象实现

魔术属性

类与对象实现

魔术方法

类与对象实现

构造方法

类与对象实现

析勾方法

2. 基本的oo机制

2.1. 命名空间namespace  package机制

Sql标准化没有默认的命名空间机制,使用mysql提供的组机制解决。。大概常用的命名空间模块约100个左右,可以参考java ,net系列的sdk命名空间。。

Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结

貌似组和存储过程都是存储在mysql数据库文件里面的。在文件夹没有找到他们的痕迹。。

2.2.  原型机制 vs Class类模板机制  

在实现oo的时候,有原型and Class俩种机制。。Sql也是函数式语言,类似js,不过还是使用了class类模板机制

2.3. 定义class Class模板就使用表来实现啦

Class模板就使用表来实现啦。表结构相当于class模板,记录就是具体的对象了。。

比如创建一个class  city( city_id,cityName ) 方法,getName()

CREATE TABLE `city` (

`city_id` int(10) NOT NULL,

`city_name` varchar(50) NOT NULL,

`province_id` varchar(20) NOT NULL,

`first_letter` varchar(20) DEFAULT NULL,

`is_hot` int(10) NOT NULL DEFAULT '0',

`state` int(10) NOT NULL DEFAULT '1',

PRIMARY KEY (`city_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

2.4. 绑定class方法 getName建立一个com.attilax.city/city_getName函数

Mysql的group机制只有开发室有用,运行时是不存在的,所以我们只好在方法名称前面添加命名空间和类名前缀来区分了。

BEGIN

#Routine body goes here...

declare namex  VARCHAR(200);

#call  log( obj_id);

select city.city_name into namex  from city where city_id=obj_id  ;

RETURN namex;

END

3. 新建对象,并调用对象方法getName

3.1. 创建一个obj, 设置对象属性

Sql里面默认只有int string等细粒度数据类型。。复合数据类型是使用表集合实现的。。

创建对象,其实就是insert了

insert city(city_id,city_name) VALUES(888,'mycity')

创建city对象,并设置city_name属性。。

3.2. 获得对象引用

对象引用其实就是一个标识id。。这里直接使用city_id 作为city对象的引用即可。

3.3. 调用对象方法,有点类似于反射,使用类方法调用对象标识和其他参数

set namex=city_getName(883);

4. 对象的gc

使用sql编程,对象的存储是存储在表里面的,因为我们一般很多时候就是为了持久化的对象的,所以就不需要个gc。但是少数撤下,可能只是个临时对象,此时就需要gc,普通的,delete生产的临时对象就可以了,完成了gc过程。。。  虽然需要手动管理一下gc过程,不过还是很容易的。

5. 测试主函数main

BEGIN

#Routine body goes here...

declare namex  VARCHAR(200);

##创建对象,并制定对象引用标识

insert city(city_id,city_name) VALUES(883,'mycity883');

##调用对象方法

set namex=city_getName(883);

select namex;

END

6. 参考资料

Mysql存储过程查询结果赋值到变量的方法 - mysql数据库栏目 - 红黑联盟.html

作者:: 绰号:老哇的爪子claw of Eagle 偶像破坏者Iconoclast image-smasher

捕鸟王"Bird Catcher 王中之王King of Kings 虔诚者Pious 宗教信仰* Defender of the Faith. 卡拉卡拉红斗篷 Caracalla red cloak

简称:: Emir Attilax Akbar 埃米尔 阿提拉克斯 阿克巴

全名::Emir Attilax Akbar bin Mahmud bin  attila bin Solomon Al Rapanui

埃米尔 阿提拉克斯 阿克巴 本 马哈茂德 本 阿提拉 本 所罗门  阿尔 拉帕努伊

常用名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

头衔:uke总部o2o负责人,全球网格化项目创始人,uke宗教与文化融合事务部部长,Uke部落首席大酋长,uke制度与重大会议委员会委员长,uke保安部首席大队长,uke制度检查委员会副会长,奶牛科技cto ,uke波利尼西亚区大区连锁负责人,克尔格伦群岛区连锁负责人,莱恩群岛区连锁负责人,uke汤加王国区域负责人,。布维岛和南乔治亚和南桑威奇群岛大区连锁负责人。。

转载请注明来源:attilax的专栏   http://www.cnblogs.com/attilax/

--Atiend