Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结
Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结
1.2. 大型项目或产品型项目(有换数据库需求的),大规模使用js编写业务逻辑,把后端大力简化为一个rest接口的数据库驱动2
1.4. 貌似比较理想的模式 前端h5(ui界面)+js(业务逻辑)+rest(通讯层)+ sql(业务逻辑)+数据库(存储)2
2.4. 绑定class方法 getName建立一个com.attilax.city/city_getName函数5
3.3. 调用对象方法,有点类似于反射,使用类方法调用对象标识和其他参数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命名空间。。
貌似组和存储过程都是存储在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
Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结的更多相关文章
- Atitit easyui翻页组件与vue的集成解决方案attilax总结
Atitit easyui翻页组件与vue的集成解决方案attilax总结 ===============使用1 ===========\paggingUtil_easyui_vue.js2 C:\U ...
- Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js
Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一 三个基本的特性:封装.继承与多态1 1.2. 魔 ...
- Atitit 基于meta的orm,提升加速数据库相关应用的开发
Atitit 基于meta的orm,提升加速数据库相关应用的开发 1.1. Overview概论1 1.2. Function & Feature功能特性1 1.2.1. meta api2 ...
- Atitit.软件与编程语言中的锁机制原理attilax总结
Atitit.软件与编程语言中的锁机制原理attilax总结 1. 用途 (Db,业务数据加锁,并发操作加锁.1 2. 锁得类型 排它锁 "互斥锁 共享锁 乐观锁与悲观锁1 2.1. 自旋锁 ...
- atitit.基于http json api 接口设计 最佳实践 总结o7
atitit.基于http json api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...
- atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系
atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系 1. server控件是要server了解了标签.种类型的server控件: 1 1. ...
- 【设计模式系列】之OO面向对象设计七大原则
1 概述 本章叙述面向向对象设计的七大原则,七大原则分为:单一职责原则.开闭原则.里氏替换原则.依赖倒置原则.接口隔离原则.合成/聚合复用原则.迪米特法则. 2 七大OO面向对象设计 2.1 单一 ...
- oo面向对象--规格化设计
oo面向对象--规格化设计 规格化设计与抽象 要了解规格化设计首先要了解抽象化的程序设计,两者是密不可分的. 抽象化(Abstraction) 抽象化是将数据与程序,用语义呈现他们的外观,但是隐藏起它 ...
- Atitit.5gl 第五代语言编程语言 PROLOG教程 人工智能语言的标准 与实现
Atitit.5gl 第五代语言编程语言 PROLOG教程 人工智能语言的标准 与实现 1. 第五代语言就是自然语言又被称为知识库语言或人工智能语言,1 2. 人工智能语言特点2 2.1. 试探法2 ...
随机推荐
- java调用sqlldr oracle 安装的bin目录
package com.jyc.sqlldr; import java.io.BufferedReader;import java.io.InputStream;import java.io.Inpu ...
- windows 共享文件夹 给 mac
假设我要共享文件夹A (1)在windows上, 共享该文件夹 (2)然后macbook 和 pc 连接同一个网络 (3)在finder选择连接服务器 (4)输入服务器地址smb://**** ...
- Git Pull 错误
当是用TortoiseGit 从多个源 Pull过数据后, 不能再使用默认的 Remote origin选项进行Pull操作. 每个工程 Commit\Push前需要Pull操作时, 采用独立的URL ...
- uva12063数位dp
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...
- linux学习第一阶段
最近比较盲目的生活,翻来覆去,总归是为了自己,还是静下心来看看东西吧.好好学习.天天向上
- How to make your assembly more secure from referencing by unauthorized bits
Now the security has a trend to become more and more important in our daily work, hence I did some r ...
- linux platform设备与驱动
struct platform_driver { int (*probe)(struct platform_device *); int (*remove)(struct platform_devic ...
- / fluxChatDemo / 系列 ——fluxDemoChat 组件编写
还是用各部分来表示过程吧,没文采,就先这样记着吧 嘻嘻 梳理问题: 编写es6风格的组件时,需要引入import React from ‘react’ 然后页面就华丽丽的展示出了我写的1.2两个字 在 ...
- HTML元素基础学习
HTML元素 HTML文档是由HTML元素定义的.HTML元素是指从start tag(opening tag)到end tag(closing tag)的所有代码,即start tag + cont ...
- HTML5 使用application cache 接口实现离线数据缓存
1.配置缓存文件 cache manifest MIME TYPE:text/cache-manifest文件名称:name.appcache作用:用于配置需要缓存的文件 2.使用方法 在服务器上添加 ...