vitamin-framework-lua
vitamin 框架 lua版本
這里基礎(chǔ)框架是一個開源版本限书,你可以在這里找到:Vitamin Lua
維他命框架是建立在依賴注入思想上的輕型MVC框架,設(shè)計初衷是為了提高代碼的可讀性及提高開發(fā)效率哟冬。
由于Lua是基于函數(shù)式編程的語言洁仗,所以對于Vitamin的實現(xiàn)竹习,需要先實現(xiàn)OOP一些語法糖
- 語法糖說明
class
實現(xiàn)了OOP語法的部分功能
Class -- OOP實現(xiàn)
+ -- 定義一個類
+ define(object)
+
+ -- 從類定義實例化
+ new(object,...)
+
+ -- 從類定義取單例
+ instance(nameOrObject)
+ -- 繼承
+ -- base 基類
+ -- object 當(dāng)前類實現(xiàn)
+ extend(base, object)
+ -- 用限定名稱反射出類定義
+ getDefineByName(name)
+ -- 取得該類的限定名稱
+ getQualifiedClassName(class)
+ -- 取得該類基類的限定名稱
+ getQualifiedSuperclassName(class)
而對應(yīng)的類結(jié)構(gòu)應(yīng)該看起來像這樣
-- 類定義
Class.define({
className="Item",
constructor=function()
-- todo
end
})
-- 類繼承
local Item=Class.getDefineByName('Item');
local RedItem=Class.define(Item,{
className="RedItem",
constructor=function()
-- todo
end
})
-- 實例化
local redItem=Class.new(RedItem);
array
數(shù)組結(jié)構(gòu)
數(shù)組遵循lua的基本規(guī)則指孤,索引從1開始,異常索引將返回0.
Array -- 數(shù)組
+ -- 轉(zhuǎn)換成字符串
+ toString(splitchar)
+ -- 添加元素到末尾
+ push(...)
+ -- 刪除第一個匹配內(nèi)容的項
+ remove(item, startIndex)
+ removeAt(index)
+ -- 刪除所有匹配內(nèi)容的項
+ removeAll(item)
+ -- 查找并返回索引 0為未查找到
+ indexOf(item)
+ -- 從末尾開始查找并返回索引 0為未查找到
+ lastIndexOf(item)
+ -- 插入元素
+ insert(item, index)
+ -- 刪除第一個元素 并返回該元素
+ shift()
+ -- 刪除最后一個元素 并返回該元素
+ pop()
+ -- 淺表克隆
+ concat(array)
+ -- 刪除從起始位置到結(jié)束位置的元素,暫未實現(xiàn)添加元素
+ splice(start, _end, ...)
+ -- 數(shù)組排序
+ sort(comparefunc)
+ -- 取數(shù)組值
+ get(index)
+ -- 設(shè)置數(shù)組值
+ set(index, v)
+ -- 遍歷數(shù)組
+ forEach(func)
基本用法
-- 實例化一個數(shù)組 的同時可以初始化數(shù)組內(nèi)容
local array=Class.new(Array,'hello','world');
prinf(array:get(1));
-- > hello
-- 數(shù)組的用法
local array1=Class.new(Array,'a','b');
array1:push('c','d','e','f','a1','b1','c1','d1','e1','f1');
local array2=array1:splice(1,6);
Logger.log(array1:toString());
Logger.log(array2:toString());
-- [LOG] [1 : a1, 2 : b1, 3 : c1, 4 : d1, 5 : e1, 6 : f1] (Len:6)
-- [LOG] [1 : a, 2 : b, 3 : c, 4 : d, 5 : e, 6 : f] (Len:6)
logger
Logger -- Logger除了添加了類型標(biāo)簽外瘩绒,可以打印出類結(jié)構(gòu)猴抹、數(shù)組結(jié)構(gòu)及Table結(jié)構(gòu)
+ -- 打印分隔線
+ line(...)
+
+ log(...)
+ info(...)
+ warn(...)
+ debug(...)
+ error(...)
event
EventEmiter -- 事件
+ -- 監(jiān)聽事件
+ -- type 事件類型
+ -- listener 事件回調(diào)
+ -- priority 事件優(yōu)先級
+ on(type, listener, priority)
+ -- 取消事件
+ off(type, listener)
+ -- 發(fā)送事件
+ emit(type, ...)
基本用法
-- 實例化一個數(shù)組 的同時可以初始化數(shù)組內(nèi)容
local emiter=Class.new(EventEmiter);
emiter:on('init',function(data)
Logger.log(data);
end);
emiter:emit('init',{a=1,b=2});
-- > { a:1,b:2 }
- Vitamin示例
#!/usr/local/bin/lua
require('src.vitamin.core.logger');
require('src.vitamin.core.class');
require('src.vitamin.core.array');
require('src.vitamin.vitamin');
Logger.line('Logger');
-- 定義數(shù)據(jù)模型
Class.extend(Vitamin.ModelBase, {
className="ModelLogin",
data=1045,
initialize = function(self)
Logger.debug(self.className);
end
});
-- 定義數(shù)據(jù)模型
Class.extend(Vitamin.ModelBase, {
className="ModelUser",
modelLogin = Inject,--聲明模型注入
initialize = function(self)
Logger.info(self.modelLogin.data);
end
});
-- 定義視圖組件
ViewLogin = Class.extend(Vitamin.ViewBase, {
className="ViewLogin",
modelLogin = Inject('ModelLogin'),--聲明模型注入的推薦用法
enter = function(self)
Logger.debug('modelLogin',self.modelLogin.data);
end
});
-- 初始化Vitamin框架
Vitamin.initialize();
-- 進入視圖
ViewLogin:enter();