Lua: 我可以把 "require" 当作一种依赖注入的形式吗?
2012-9-10 12:41:32
收藏:0
阅读:143
评论:1
我正在设计一个医院集成系统,该系统从各个医院(我们的客户)消耗数据,然后根据从数据库中读取的配置应用特定的业务规则到该数据上。如果我使用Java,我的第一直觉是构建代表各种业务规则的一系列接口,然后注入具体实例(使用Spring/guice)来组合一个完全配置的对象。这将允许我在配置逻辑(什么业务规则应该应用于医院Foo?)和实际业务规则之间实现清晰的分离。
不幸的是,我不使用Java,我使用Lua。我在过去的几天里沉浸在Lua文献中,发现最接近DI的类比似乎是使用模块。此外,似乎规定了在运行时如何解析lua模块的规则完全基于询问本地文件系统。
"模块模式"是实现我想要的(配置逻辑与业务逻辑的分离)最好/唯一的方法吗?如果是这样,如何利用Lua的模块加载规则来在运行时改变实际加载的模块?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
第一步: 不要再像Java程序员那样思考。
现在你在使用 _Lua_。这里没有固定原型的类,也没有显式的编译。函数是第一类的对象,它们是_值_。所以以这种方式分解问题。
你有一堆“规则”(即函数)。 你想要将其中一些规则应用于某些数据。 你有一个配置系统,它说:“将规则应用于来自位置X的数据时,请使用这组规则。” 所以…这样做。
你检测到数据来自位置X。 所以你调用你的配置逻辑来为位置X建立一个包含要应用于该数据的规则(即函数)的Lua表。 位置X的配置逻辑从存储它们的任何位置加载规则,并返回它们。 如果配置在数据库之类的地方,那么位置X的数据库条目可能会按名称引用规则。
你如何将规则名称转换为实际的Lua函数取决于你,但有许多方法。你可以拥有一个注册表,将一个目录中所有的Lua文件预加载到一个表中,然后根据该表中的名称选择规则。 或者也许你有一个命名的Lua文件/脚本数据库,其中每个文件都是一个单独的规则。 实现这个的方法多种多样。
在Lua中,“依赖注入”只是“决定如何构建函数集合”。 它并不是一个特殊的事情,因为Lua比Java更自由形式。 它只是函数从哪里来,如何将它们组合到一个表中,然后如何将该表应用于一些数据的问题。 所有这些都取决于你。