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 ...
随机推荐
- html 超文本标记语言
1.html超文本标记语言 2.在html中存在着大量的标签,我们用html中存在的标签将要显示在网页的内容包含起来. 3.css 控制网页显示内容的效果. 4.html+css 只能是静态网页. 5 ...
- Android下的屏幕适配
1080 100dp 300px720 100dp 200px 300px 1080px 比例是300/1080=0.277200px 720px
- [转]Windows7文件夹转移清理臃肿的C盘
当你使用Windows的时候,你会发现无论哪个版本的Windows,系统都会默认将用户文件夹和程序数据文件夹(xp下是Documents and Settings文件夹,而windows7和vista ...
- Entity Framework 通过Lambda表达式更新指定的字段
本来需要EF来更新指定的字段,后来在园子里找到了代码 var StateEntry = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectS ...
- 未能加载文件或程序集“Microsoft.ReportViewer.WinForms 解决办法
异常信息: 未能加载文件或程序集“Microsoft.ReportViewer.WinForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken= ...
- 关于MVC的开源商城 Nop之闲聊
nopcommerce是国外的一个高质量的开源b2c网站系统,基于EntityFramework4.0和MVC3.0,使用Razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的,基 ...
- Python新建动态命名txt文件
# -*- coding: utf-8 -*- import os,sys,time fname=r"D:\01-学习资料\python" def GetNowTime():#获取 ...
- Sort with Swap(0, i)
原题连接:https://pta.patest.cn/pta/test/16/exam/4/question/678 题目如下: Given any permutation of the number ...
- ajax函数封装
function ajax(url, fnSucc, fnFaild) { //1.创建Ajax对象 if(window.XMLHttpRequest)//必须加window否则ie报错 { var ...
- Mysql 学习笔记
创建表: create table testtable( id_ bigint not null AUTO_INCREMENT, name varchar(75) null, vmid varchar ...