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. html 超文本标记语言

    1.html超文本标记语言 2.在html中存在着大量的标签,我们用html中存在的标签将要显示在网页的内容包含起来. 3.css 控制网页显示内容的效果. 4.html+css 只能是静态网页. 5 ...

  2. Android下的屏幕适配

    1080 100dp 300px720 100dp 200px 300px 1080px 比例是300/1080=0.277200px 720px

  3. [转]Windows7文件夹转移清理臃肿的C盘

    当你使用Windows的时候,你会发现无论哪个版本的Windows,系统都会默认将用户文件夹和程序数据文件夹(xp下是Documents and Settings文件夹,而windows7和vista ...

  4. Entity Framework 通过Lambda表达式更新指定的字段

    本来需要EF来更新指定的字段,后来在园子里找到了代码 var StateEntry = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectS ...

  5. 未能加载文件或程序集“Microsoft.ReportViewer.WinForms 解决办法

    异常信息: 未能加载文件或程序集“Microsoft.ReportViewer.WinForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken= ...

  6. 关于MVC的开源商城 Nop之闲聊

    nopcommerce是国外的一个高质量的开源b2c网站系统,基于EntityFramework4.0和MVC3.0,使用Razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的,基 ...

  7. Python新建动态命名txt文件

    # -*- coding: utf-8 -*- import os,sys,time fname=r"D:\01-学习资料\python" def GetNowTime():#获取 ...

  8. Sort with Swap(0, i)

    原题连接:https://pta.patest.cn/pta/test/16/exam/4/question/678 题目如下: Given any permutation of the number ...

  9. ajax函数封装

    function ajax(url, fnSucc, fnFaild) { //1.创建Ajax对象 if(window.XMLHttpRequest)//必须加window否则ie报错 { var ...

  10. Mysql 学习笔记

    创建表: create table testtable( id_ bigint not null AUTO_INCREMENT, name varchar(75) null, vmid varchar ...