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. java调用sqlldr oracle 安装的bin目录

    package com.jyc.sqlldr; import java.io.BufferedReader;import java.io.InputStream;import java.io.Inpu ...

  2. windows 共享文件夹 给 mac

      假设我要共享文件夹A (1)在windows上, 共享该文件夹 (2)然后macbook 和 pc  连接同一个网络 (3)在finder选择连接服务器 (4)输入服务器地址smb://**** ...

  3. Git Pull 错误

    当是用TortoiseGit 从多个源 Pull过数据后, 不能再使用默认的 Remote origin选项进行Pull操作. 每个工程 Commit\Push前需要Pull操作时, 采用独立的URL ...

  4. uva12063数位dp

    辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然 ...

  5. linux学习第一阶段

    最近比较盲目的生活,翻来覆去,总归是为了自己,还是静下心来看看东西吧.好好学习.天天向上

  6. 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 ...

  7. linux platform设备与驱动

    struct platform_driver { int (*probe)(struct platform_device *); int (*remove)(struct platform_devic ...

  8. / fluxChatDemo / 系列 ——fluxDemoChat 组件编写

    还是用各部分来表示过程吧,没文采,就先这样记着吧 嘻嘻 梳理问题: 编写es6风格的组件时,需要引入import React from ‘react’ 然后页面就华丽丽的展示出了我写的1.2两个字 在 ...

  9. HTML元素基础学习

    HTML元素 HTML文档是由HTML元素定义的.HTML元素是指从start tag(opening tag)到end tag(closing tag)的所有代码,即start tag + cont ...

  10. HTML5 使用application cache 接口实现离线数据缓存

    1.配置缓存文件 cache manifest MIME TYPE:text/cache-manifest文件名称:name.appcache作用:用于配置需要缓存的文件 2.使用方法 在服务器上添加 ...