开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7917|回复: 30
收起左侧

[易语言纯源码] 易语言MVC开发框架

[复制链接]
发表于 2018-12-19 19:13:16 | 显示全部楼层 |阅读模式   北京市北京市
分享源码
界面截图:
是否带模块: 调用了模块
备注说明: -
本帖最后由 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


开源地址:https://github.com/zhao6810/EhttpServer  欢迎点星星。

点评

正真牛逼有技术含量的东西无人问津,那些垃圾源码却能得到满堂喝彩,这就是易的现状!   重庆市重庆市  发表于 2020-3-9 17:24

评分

参与人数 4好评 +3 精币 +8 收起 理由
修善 + 1 + 1 支持开源~!感谢分享
易语言小白菜 + 1 支持开源~!感谢分享
日勿日勿 + 1 + 1 支持开源~!感谢分享
精易客服 + 1 + 5 支持开源~!感谢分享

查看全部评分


本帖被以下淘专辑推荐:

结帖率:91% (48/53)

签到天数: 1 天

发表于 2020-4-23 13:32:29 | 显示全部楼层   广东省深圳市
这样子搞感觉很麻烦啊,稳定和兼容性都不行,
回复 支持 反对

使用道具 举报

结帖率:100% (20/20)

签到天数: 24 天

发表于 2020-4-12 20:11:23 | 显示全部楼层   **
厉害了  666666
回复 支持 反对

使用道具 举报

结帖率:100% (7/7)
发表于 2020-3-12 19:39:44 | 显示全部楼层   广东省中山市
回复 支持 反对

使用道具 举报

结帖率:71% (15/21)
发表于 2020-3-9 17:24:38 | 显示全部楼层   重庆市重庆市
正真牛逼有技术含量的东西无人问津,那些垃圾源码却能得到满堂喝彩,这就是易的现状!
回复 支持 反对

使用道具 举报

结帖率:81% (13/16)
发表于 2018-12-27 17:20:15 | 显示全部楼层   广东省深圳市
卧槽模仿spring的吗
回复 支持 反对

使用道具 举报

结帖率:91% (61/67)

签到天数: 16 天

发表于 2018-12-25 13:26:09 | 显示全部楼层   湖南省怀化市
易语言MVC开发框架
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)
发表于 2018-12-25 10:49:10 | 显示全部楼层   江西省南昌市
这个不错,很不错~~~
回复 支持 反对

使用道具 举报

发表于 2018-12-24 04:31:57 | 显示全部楼层   浙江省台州市
不如直接用tp好一些,这个还必须占用一台服务器,并不能多个应用
回复 支持 反对

使用道具 举报

签到天数: 1 天

 楼主| 发表于 2018-12-23 18:39:28 高大上手机用户 | 显示全部楼层   北京市北京市
大兔崽子 发表于 2018-12-22 16:35
说实在的  这个真的是  很厉害

SQLAction  的操作方式看着就很舒服   仿佛看见了 tp5框架

就是按照这个模式写的,易语言的类不支持写,只支持读。 还得研究汇编算法。麻烦。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表