精易论坛
标题:
易语言MVC开发框架
[打印本页]
作者:
zhao6810
时间:
2018-12-19 19:13
标题:
易语言MVC开发框架
本帖最后由 zhao6810 于 2018-12-20 13:51 编辑
易语言MVC开发框架
感谢{
《卓越网维小邓》提供的HP易语言静态库。
《kn剑齿虎》SQL生成库。
《kyozy》提供的HashTable与sqlite3模块。
}
HTTP层基于HPsocket5.3.4实现。
静态编译需要用到VS2010 链接器(20180925) 链接: https://pan.baidu.com/s/1fsxtjFhnAD8GaTHt1ZpXmQ 提取码: aqym
例子简单实现前段与后台。
自动路由规则。
控制器
Route.AddRoute (“/”, ControllerIndex.SumFunAddres (4), 取变量数据地址 (ControllerIndex))
Route.AddRoute (“/index/story”, ControllerIndex.SumFunAddres (5), 取变量数据地址 (ControllerIndex))
Route.AddRoute (“/index/update”, ControllerIndex.SumFunAddres (6), 取变量数据地址 (ControllerIndex))
Route.AddRoute (“/user/index”, ControllerLogin.SumFunAddres (4), 取变量数据地址 (ControllerLogin))
Route.AddRoute (“/user/login”, ControllerLogin.SumFunAddres (5), 取变量数据地址 (ControllerLogin))
Route.AddRoute (“/admin/main”, ControllerUser.SumFunAddres (4), 取变量数据地址 (ControllerUser))
Route.AddRoute (“/admin/index”, ControllerUser.SumFunAddres (5), 取变量数据地址 (ControllerUser))
Route.AddRoute (“/admin/logout”, ControllerUser.SumFunAddres (6), 取变量数据地址 (ControllerUser))
Route.AddRoute (“/admin/news/index”, ControllerNews.SumFunAddres (4), 取变量数据地址 (ControllerNews))
Route.AddRoute (“/admin/news/add”, ControllerNews.SumFunAddres (5), 取变量数据地址 (ControllerNews))
Route.AddRoute (“/admin/news/addnews”, ControllerNews.SumFunAddres (6), 取变量数据地址 (ControllerNews))
Route.AddRoute (“/admin/news/delnews”, ControllerNews.SumFunAddres (7), 取变量数据地址 (ControllerNews))
注册路由,并且计算出对应地址。并且实现自动调用
每个控制器中第一方法必须是SumFunAddres并且必须公开。第二个参数是方法序号,用于计算控制器内存地址。
序号计算方法{
_初始化:0
_销毁:1
SumFunAddres:2
Prepare:3
}
所以你的控制器从4开始算。
一个简单的登陆例子
Http 为参考类型,是控制器请求与响应的中间件,里边实现一些基础数据传递。
Prepare (Http)
如果 (This.IsPost ())
User = This.Post (“user”)
Pass = This.Post (“pass”)
User_id = SqlLite3.Wx_User ().Login (User, Pass)
如果 (User_id ≠ 0)
SessionId = Session.SessionCreate (User_id, User, Http.Request.ClientIp)
This.SetCookie (SessionId)
This.Success (“登陆成功”, “/admin/main”)
This.Error (“用户名或者密码错误”, “/user/index”)
否则
This.Error (“用户名或者密码错误”, “/user/index”)
以上为基础逻辑控制
Http.Response.Body = 到字节集 (This.GetTemplateContent ()) 比较关键.将模版内容设置到BODY体中。
This.GetHerder (Http.Response.Herder) 设置Herder头
Http.Response.StateCode = 200
以上为响应体与响应头
视图层支持基础的模版功能 变量分配,模版展示。
M层
只实现了一些基础的SQL语句生成。
例如插入
news.Create_time = Times.Time ()
SQLAction.data (“news_title”).val_Str (news.News_title)
SQLAction.data (“news_content”).val_Str (news.News_title)
SQLAction.data (“create_time”).val_Int32 (news.Create_time)
SQL = SQLAction.Insert (“wx_news”)
返回 (SQLlite.执行SQL (SQL))
删除
SQLAction.Model (“wx_news”)
SQL = SQLAction.where (“news_id = ” + 到文本 (News_ID)).Delete ()
返回 (SQLlite.执行SQL (SQL))
另外还支持设置静态目录,SESSION管理,MIME类型自识别等等。
以前挺喜欢易语言单文件的原代码格式,现在接触语言多了越发多文件的好处实在太多了,比如易语言的“自定义数据类型”如果定义类型过多话,找起来非常麻烦,非常建议老吴给“自定义数据类型”也加个文件夹管理功能吧,做好类型分类,这样做会好很多的。
有过MVC开发经验的简单看看就能看懂我的结构。
易语言缺少很多现代语言的特性,例如反射、动态类等等,连基本的类都是伪类。为了动态调用类遇到了很多坑。比如调用类的时候要带上本对象,然后还得手动初始化局部变量,如果这两件事没做会遇到各种崩溃,之前参考其他易友写的方法,就是各种的崩溃,直到反编译了易语言调用方法。
以上开发的只是初步实现,离可以上线还缺少很多东西,例如SQL注入,Session安全,等等。 做一些简单小网站暂时够用,只要你觉得不嫌麻烦。
调用类方法的过程。
pushad
mov ecx,dword ptr ss:[ebp+10]
push ecx
mov eax,dword ptr ss:[ebp+8]
push eax
eax,dword ptr ss:[esp]
eax,dword ptr ds:[eax]
eax,dword ptr ds:[eax]
mov ecx,dword ptr ss:[ebp+c]
call ecx
popad
作者:
流云思水
时间:
2018-12-19 20:20
Hpsocket,写一个稳定的HTTPServer就可以了。。。。 崩溃都基本是核心不稳定造成的。。目前自己项目就是HP写的HTTPSERVER,每日请求几千万次~ 稳定的一笔。 Hp大法好~~
作者:
毛超
时间:
2018-12-19 22:10
感谢阜南县!!!!!!!!!!!
作者:
安哥
时间:
2018-12-20 15:13
这个牛逼啊
作者:
猜度
时间:
2018-12-20 15:51
不错不错,在学习hp
作者:
static101
时间:
2018-12-20 18:09
厉害·了感谢分享
作者:
q19950316
时间:
2018-12-20 18:45
由于今年参赛作品较多,帖子发完后可能很快就被新帖顶下去了,为了让更多易友看到优秀的源码作品,请优秀源码申请精华,申请地址 https://125.confly.eu.org/thread-13871770-1-1.html
作者:
k520413
时间:
2018-12-20 19:10
正在学习啊
作者:
枫眼
时间:
2018-12-20 19:39
6666666666666666666666666666
作者:
incwin
时间:
2018-12-20 23:07
正在学习啊
作者:
liuwentao3079
时间:
2018-12-21 00:33
学习一下字
作者:
落寞的青春
时间:
2018-12-21 10:18
支持开源~!感谢分享
作者:
xiute123
时间:
2018-12-21 10:56
支持开元 不错啊
作者:
etnperlong
时间:
2018-12-21 13:29
这个太强了!收藏一波了!
作者:
fengyewl
时间:
2018-12-22 04:08
支持开源~!感谢分享
作者:
伤月寒风
时间:
2018-12-22 12:26
厉害胃 niupi
作者:
leisureman
时间:
2018-12-22 15:22
都是人才啊mvc出来了
作者:
大兔崽子
时间:
2018-12-22 16:35
说实在的 这个真的是 很厉害
SQLAction 的操作方式看着就很舒服 仿佛看见了 tp5框架
虽然不会用这个去写web端 但是 感谢分享 依然可以学习下类的写法 之前写代码的方式 实在是 太水了
作者:
陈冠希
时间:
2018-12-22 20:01
支持开源~!感谢分享
作者:
yy6688
时间:
2018-12-22 20:48
由于今年参赛作品较多,帖子发完后可能很快就被新帖顶下去了,为了让更多易友看到优秀的源码作品,请优秀源码申请精华,申请地址 https://125.confly.eu.org/thread-13871770-1-1.html
作者:
zhao6810
时间:
2018-12-23 18:39
大兔崽子 发表于 2018-12-22 16:35
说实在的 这个真的是 很厉害
SQLAction 的操作方式看着就很舒服 仿佛看见了 tp5框架
就是按照这个模式写的,易语言的类不支持写,只支持读。 还得研究汇编算法。麻烦。
作者:
左边口袋
时间:
2018-12-24 04:31
不如直接用tp好一些,这个还必须占用一台服务器,并不能多个应用
作者:
ztcjn
时间:
2018-12-25 10:49
这个不错,很不错~~~
作者:
鼠标疯了
时间:
2018-12-25 13:26
易语言MVC开发框架
作者:
xunkoo
时间:
2018-12-27 17:20
卧槽模仿spring的吗
作者:
陈冠希
时间:
2020-3-9 17:24
正真牛逼有技术含量的东西无人问津,那些垃圾源码却能得到满堂喝彩,这就是易的现状!
作者:
小渣渣哦
时间:
2020-3-12 19:39
作者:
夜的静night
时间:
2020-4-12 20:11
厉害了 666666
作者:
monks
时间:
2020-4-23 13:32
这样子搞感觉很麻烦啊,稳定和兼容性都不行,
作者:
xq378
时间:
2025-5-24 00:12
学习 下 谢谢 楼主
欢迎光临 精易论坛 (https://125.confly.eu.org/)
Powered by Discuz! X3.4