www.dnnworkflow.cn

随笔- 20  文章- 4  评论- 32  阅读- 18977 
    对于标准的DotNetNuke模块,数据是和模块相关的,这个也就是我们在开发模块的数据结构的时候,比如像Survery模块等,主表必然是有一个 ModuleId这个字段的,这也就保证了当我们在同一个网站中即使有100个该模块的实例,但是其数据却是完全不同的,从而保证了我们可以在同一个网站 中对模块进行任意多次的重用,这个是非常好的一个特性。

    同时,DotNetNuke的模块机制确保了模块是一个完全封闭的、完全有自我行为控制能力的独立的小整体,就像是美利坚合众国下的州一样,虽然属于同一个体制之下,但是却可以有自己的法律和行为——这个就可以理解为模块的Control(控制)。

    以上所讲的可能有点啰嗦而且难懂,但是我却坚持要将之讲出来,是因为我觉得这对于我扩展DotNetNuke来说非常重要。

    对于DotNetNuke来说,每一个模块,就可以理解为一个完完全全的、完完整整的系统(在DotNetNuke大框架之内的完整),完全不依赖于其他任何的普通模块(管理模块除外)。

    当然,这也有一定的限制,也就是对于DotNetNuke来说,模块之间,基本上是没有互动的;而且,模块之间的数据,也是毫无关系的。而我在进行模块开 发的时候,认为如果模块之间完全没有关系的话,实际上可能不能反映某些实际的案例,所以,在我的数据结构中,就已经预留了相应的接口,从而确保模块之间(当然是同一类型的模块)有可能进行数据的共享,这也就是我在《DotNetNuke自定义窗体模块的数据结构(二)》 的数据结构中,除了常规的ModuleId之外,还要增加FormID和KeyID的缘故,我希望的是开发出来的模块既可以做到像通常的 DotNetNuke模块那样,有本模块完全独立的数据,也可以在管理员配置的情况下,不但可以展示本模块实例的数据,同时也可以展示统一模块下其他模块 实例的数据。

    标准模式下,DotNetNuke的模块和数据之间的关系应该是如下图所示:


        经过数据结构的重新设计之后,我们的一个模块既可以对应自己本模块的数据,也可以在某种情况下,将其他模块的数据“拿出来”一起进行展示。按照我们的数据结构,DotNetNuke的模块和数据的关系就如下图所示:

    上图中,模块实例01和02仍然是只展示自己的数据;但是模块实例03则既可以展示本模块的数据,又将01、02两个模块的数据取出来一起进行展示。

    这样的好处是什么呢?我个人认为,在业务逻辑非常复杂的情况下,如果数据非要用一个模块来展示的话,可能会造成权限的 极其复杂,甚至会造成权限的混乱;而如果模块之间的数据可以共享的话,那么,复杂的业务逻辑,就可能可以拆分成若干个模块,这若干个模块每一个专注某一项 功能,和页面的权限、模块的权限组合在一起,可以较为轻松的完成在一个模块中很难完成的业务逻辑。

    嗯,仍然是有点难以理解,需要晚一点,我们会涉及到这种情况的例子,到时候我们再回来看这一章节。
 posted on   DnnWorkflow  阅读(1845)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示