完全不用任何軟件工程工具,純手工打造的一本底層架構
終於靜下心來用1個多小時時間寫成的一本架構文檔
一:
MyBasic 架構說明
MyBasic是一個basic解釋器,運行環境,能夠實現內嵌過程的擴充功能,在本項目中實現內嵌基本指令,和 à
Mysql(就地說明:一個純粹完全使用c++庫開發的很簡易的數據庫系統,能夠實現最基本的insert,select,update,drop table,drop database,create table,create database,delete,use db功能,不支持索引,不支持其他操作[不過可以有待將來擴充])功能.
將來還可以擴充http功能,等其他任何功能.
特性:
1 完全使用C,C++的基本函數庫,核心內容不使用操作系統的任何函數庫,只在一些不是核心的地方不值得重新開發的地方使用依賴平臺的動態庫加載技術.
就地說明:
很簡單:使用#ifdef 語句 決定編譯平臺.
1 在dos下編譯的話,不使用動態庫加載功能,編譯出來的MyBasic不能
在二進制狀態使用擴充的功能,因爲在dos下面時間LoadLibrary這樣的功能不值得,本項目不研究這些內容.
2 windows 平臺使用 dll文件
3 unix平臺使用 so 文件
4 其他平臺理論上可以,具體在本項目中不實現.
2 可以經過編譯運行在linux,unix,windows,等等所有具備C++編譯器的任何平臺.
3 純命令行界面,運行結果可以重定向到文本文件(將來可以開發圖形界面接口)
4 輸入輸出可以接受 文件輸入,命令行輸入,http post輸入(MyBasic可以作爲一個CGI程序運行並在頁面上輸出運行結果).
一.1
MySql 架構說明.
分爲3層
第一層: 命令行界面:
接受sql語句輸入,輸出運行結果 (輸入輸出可以重定向)
調用下一層提供的api
第二層 應用層API 實現
. Query(string sql);
. Exec(string sql);
. char [][] GetResultSet();
. ConnectDb(string databasename);
這些函數通過調用MyBasic的解析器Api接口
ParseStatement(string statement);執行sql語句,
然後ParseStatement調用MyBasic的內建過程
. ”select arg1 … argn”,
. ”delete arg1 … argn”,
. ”drop arg1=tablename”
…
(這些都是mysql中需要對最終用戶提供的SQL語句).
這些內建過程都是由Mysql.dll (MySql的內核上層) 或者Mysql.so實現的.並利用MyBasic的動態可擴充功能提供給用戶.這些MyBasic內建過程實現Mysql的內核功能執行完後,返回結果指針一層一層的傳遞給上油調用者.
第三層: MySql的內核上層
實現
. ”select arg1 … argn”,
. ”delete arg1 … argn”,
. ”drop arg1=tablename”
用這些函數來實現:
char [][] select(arg1,arg2,…,argn);
int delete(arg1,arg2,…,argn);
int drop(tablename);
int drop(databasename);
其實這些函數是由MyBasic的ParseStatement()來調用的.
第四層: MySql內核下層
實現
CreateDatabaseFile(string databasename);
CreateTableFile(string tablename);
InsertRecordToTableFile(string tablefilename,CRecord arecord);
DeleteRecordsFromTableFile(string tablefilename,CRecords[] records);
SelectRecordsFromTableFile(string tablefilename,CCondition[] conditions);
附
1:MySql的配置文件,在可執行文件的相同目錄下:
MySql.ini
DataRoot=Path
MyBasicApiPath=Path
2:MySql的數據文件結構
一個文件夾就是一個數據庫
一個表需要一個表結構定義文件,一個數據文件
3:MySql特性
1 支持 int,string 兩種類型的數據結構
4:其他詳細說明:
二:MyBasic架構說明
1層:界面層
可執行的mybasic.exe文件作爲界面
2層:應用API層
提供Api庫給MySql等使用(由其他程序靜態編譯進系統)
比如:ParseStatement(string statement);
3層:MyBasic核心
執行MyBasic的所有可擴充內建過程,並輸出.
指定一個目錄夾下的所有dll(或者so,或者lib)等提供MyBasic的內建過程動態擴充功能.
附:
1:MyBasic的配置文件
放在MyBasic.exe同一目錄下
MyBasic.ini
ExpandDllPath=path