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命名空间。。

貌似组和存储过程都是存储在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总结的更多相关文章

  1. Atitit easyui翻页组件与vue的集成解决方案attilax总结

    Atitit easyui翻页组件与vue的集成解决方案attilax总结 ===============使用1 ===========\paggingUtil_easyui_vue.js2 C:\U ...

  2. Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js

    Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一  三个基本的特性:封装.继承与多态1 1.2. 魔 ...

  3. Atitit  基于meta的orm,提升加速数据库相关应用的开发

    Atitit  基于meta的orm,提升加速数据库相关应用的开发 1.1. Overview概论1 1.2. Function & Feature功能特性1 1.2.1. meta api2 ...

  4. Atitit.软件与编程语言中的锁机制原理attilax总结

    Atitit.软件与编程语言中的锁机制原理attilax总结 1. 用途 (Db,业务数据加锁,并发操作加锁.1 2. 锁得类型 排它锁 "互斥锁 共享锁 乐观锁与悲观锁1 2.1. 自旋锁 ...

  5. atitit.基于http json api 接口设计 最佳实践 总结o7

    atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...

  6. atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系

    atitit.基于组件的事件为基础的编程模型--服务器端控件(1)---------服务器端控件和标签之间的关系 1. server控件是要server了解了标签.种类型的server控件: 1 1. ...

  7. 【设计模式系列】之OO面向对象设计七大原则

    1  概述 本章叙述面向向对象设计的七大原则,七大原则分为:单一职责原则.开闭原则.里氏替换原则.依赖倒置原则.接口隔离原则.合成/聚合复用原则.迪米特法则. 2  七大OO面向对象设计 2.1 单一 ...

  8. oo面向对象--规格化设计

    oo面向对象--规格化设计 规格化设计与抽象 要了解规格化设计首先要了解抽象化的程序设计,两者是密不可分的. 抽象化(Abstraction) 抽象化是将数据与程序,用语义呈现他们的外观,但是隐藏起它 ...

  9. Atitit.5gl 第五代语言编程语言 PROLOG教程  人工智能语言的标准 与实现

    Atitit.5gl 第五代语言编程语言 PROLOG教程  人工智能语言的标准 与实现 1. 第五代语言就是自然语言又被称为知识库语言或人工智能语言,1 2. 人工智能语言特点2 2.1. 试探法2 ...

随机推荐

  1. [NHibernate]利用LINQPad查看NHibernate生成SQL语句

    上篇文章中我们提到可以通过重写NHibernate的 EmptyInterceptor 拦截器来监控NHibernate发送给数据库的SQL脚本,今天看到有朋友用LINQPad工具来进行NHibern ...

  2. JAVA 引入 junit工具框架

    我遇到的麻烦 : 开始直接按照视频上的来做,直接也是引入的他上面的jar ,但是我只引入了一个,就是上面的junit-4.4.jar,然后就会报错,会出现,空指针的错误, 后面我又按照网上的教程 这里 ...

  3. HTML5 学习笔记(三)——本地存储

    目录 一.HTML4客户端存储 1.1.提交表单发送到服务器的信息 1.2.客户端本地存储概要 二.localStorage 2.1.添加 2.2.取值 2.3.修改 2.4.删除 2.5.跨页面与跨 ...

  4. spring源码解析——spring源码导入eclipse

    一.前言     众所周知,spring的强大之处.几乎所有的企业级开发中,都使用了spring了.在日常的开发中,我们是否只知道spring的配置,以及简单的使用场景.对其实现的代码没有进行深入的了 ...

  5. windows 10 开始菜单和cortana无法工作的问题

    过了个周末,到了实验室一开机发现报了个关键错误:开始菜单和cortana无法工作. 经过一番google ,发现问题,原来是360禁用了一个服务导致,这个服务是UserManager. 我直接去开启发 ...

  6. mac搭建nginx与php

    第一步:关闭Apache及开机启动 要使用nginx,最好停用mac中自带的Apache.停用很简单: sudo launchctl unload -w /System/Library/LaunchD ...

  7. phantomjs 双向认证,访问nginx,https

    应用背景: phantomjs的一个爬虫,访问https站点,单向认证(只认证服务器身份)的都可以,双向认证(服务器和客户端都需要认证)必须上传本地证书: 开始用一个包含公钥私钥的PEM证书访问,怎么 ...

  8. css3新属性object-fit,对页面img处理

    1.http://my.xueh5.com/xh5639998239/detail-3661.html 针对其进行深度讲解推荐 http://www.zhangxinxu.com/wordpress/ ...

  9. java-如何用eclipse打包jar

    Eclipse通过导出的方式(右键单击项目,之后选择Export)打包java类文件生成jar包. 方法一:(在项目工程没有引用外部jar包时,直接导出) 选中工程---->右键,Export. ...

  10. Python3.5+selenium操作Chrome浏览器

    1.安装selenium 命令提示符下输入: pip install selenium 2.下载chromedriver 点击下载 3.将解压后的chromedriver.exe放到chrome浏览器 ...