基于MVC模式的luci开发

    MVC(Model,View,Controller)模式是一种软件设计模式。视图(view)既软件与用户交互的界面,模型(model)表示数据以及业务规则,控制器(Controller)连接二者的桥梁,接受视图所提交的请求,调用模型去完成请求。

LUCI从某些功能的实现来讲属于MVC框架。使用winSCP进入openwrt系统,可以发现在usr/lib/lua/luci文件夹下存在着三个文件子文件夹view、controller、model。view文件夹下有大量html文件,即luci的视图文件。controller文件夹下存着逻辑控制程序,model文件夹下的cbi文件夹存在着处理各种请求的程序 。例如视图wireless—>overview:

在控制器中对应处理函数即entry({"admin", "network","wireless"},arcombine(template("admin_network/wifi_overview"), cbi("admin_network/wifi")), _("Wifi"), 15)。其中"admin", "network","wireless"表示视图所在位置,cbi("admin_network/wifi"))表示其处理模型为/usr/lib/lua/luci/model/cbi下的wifi.lua。

LUCI中某些功能的实现在model中并没有专门的模型程序,因为其在Controller文件中写了功能函数做了处理。例如中的add操作,在cbi下并没有对应的程序做处理,在Controller文件中定义了function wifi_add()函数,执行对应操作。

对于一些视图页面上信息动态显示,luci采用在html文件中嵌入lua程序,利用API直接获取,采用JavaScript动态显示的方法实现。例如关联移动台信息的显示问题,直接在view/admin_network/wifi_overview.htm文件下利用嵌入lua,与JavaScript语言进行动态显示。

知道了其实现思路后,对于在openwrt的开发就相对明了了。如果想获取openwrt的系统的一些参数情况,我们就可以在相应的视图程序中查找嵌入的lua代码,然后进行分析。如果想做对系统配置操作,我们需要现在视图中找到其位置,然后在相应的Controller程序中找到其对应入口函数,如果Controller中的入口程序调用的是cbi中的模型,我们就可以顺藤摸瓜找到其模型程序进行分析。若其没有专门的模型程序,调用的是Controller程序中定义的功能函数,那我们应该分析的就是其定义的功能函数。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值