我设计一个医院集成系统消耗来自各医院的数据(客户),然后应用特定的业务规则,其基于从数据库中读取配置数据。 如果我是使用Java,我的第一本能会建立了一系列代表不同的业务规则的接口,然后注入混凝土实例(使用Spring /吉斯)组成一个完全配置的对象。 这将让我实现配置逻辑(规则应适用什么BIZ医院富?)和实际业务规则本身完全分离。
不幸的是,我没有使用Java,我使用的Lua。 我沉浸在自己的Lua文学在过去的几天里,和最近的模拟到DI似乎是模块的使用。 此外,似乎支配Lua模块是如何在运行时解决了规则上询问本地文件系统完全基于。
是“模块模式”,以达到最好的/唯一的办法我是什么之后(从BIZ逻辑配置逻辑的分离)? 如果是这样,怎么能利用Lua的模块加载规则来改变在运行时装载的实际模块(S)?
步骤1:停止思维就像一个Java程序员。
你现在在Lua。 有有明确和编译时固定的原型无类。 函数是第一类对象; 它们的值 。 所以,问题分解下来的方式。
你有一大堆的“规则”(即:函数)。 你想其中的一些规则适用于特定的数据。 你有一个配置系统,说:“当从位置X将规则应用于数据,使用这套规则。” 所以......做到这一点。
你检测数据来自位置X.所以,你打电话给你的配置逻辑,以建立位置X一个Lua表包含您的规则(即:函数)应用到这些数据。 对于位置X的配置逻辑将随时随地存储他们的规则,并将其返回。 如果配置数据库中或东西,那么对于位置X的数据库条目可能会按名称引用规则。
你如何转换该规则的名称为实际的Lua的功能是你的,但也有很多方法。 可能您预先加载所有从目录中的Lua文件到表中的注册表,然后挑选基于该表名的规则。 或许你有一个名为Lua的文件/脚本,每一个都是一个单独的规则的数据库。 有任意数量的方式来实现这一点。
在Lua中,“依赖注入”只是“决定如何构建的功能集合。” 这不是一件特别的事情,因为Lua是比Java更自由的语言。 这只是一个其中函数来从物质,如何把它们放在一起在一个表,然后如何将该表适用于一些数据。 而所有这些都取决于你。