我正在构建CMS(ASP.NET C#),我目前正在研究如何实现模块系统。如何在网络上使用大多数模块化系统?最重要的是我不希望模块搞乱任何核心文件。
案例: 我有一个使用名为Search的Web服务方法的ajax搜索方法;模块如何将其搜索结果“添加”到结果列表中?如果核心搜索仅搜索网页,并且我希望搜索也搜索电子商务模块中的产品,那么它如何将产品搜索及其内容添加到原始搜索方法的返回列表中?这甚至可能吗?
我一直在看反射,看起来在核心内运行模块代码似乎很有用,这是正确的吗?
我没有这种东西的经验,所以非常感谢推动正确的方向和/或链接/指南/提示。
答案 0 :(得分:1)
您正在寻找的内容听起来非常像基于插件的架构。我会研究一些不同的开源项目,看看他们是如何做到这一点的,找到最类似于你想做的那个,并使用他们的方法设计你的CMS。
最大的基于插件的开源项目之一是Eclipse,但我也会关注其他一些项目。
您也可以在Google上搜索“组件模式”,“模块模式”和“插件模式”。
答案 1 :(得分:1)
我同意Topher的一般意见。
在ASP.NET的上下文和您给出的示例中,我认为最好的方法是让所有模块实现自己的搜索逻辑,并通过方法公开它。然后搜索结果将调用该方法以从实现搜索的系统中的所有组件/模块获得结果。
通常,您应该为核心系统提供某种框架,并且应该抽象组件(通用功能的接口)。一个简单的经验法则是“组件被调用,而框架调用组件”。
由于搜索将根据组件的不同而实现,因此实现它的组件的工作和调用实现的框架的工作。
作为最后一点,我认为在你开始考虑具体的例子之前,你应该有一个整个系统的架构,正如Topher所说。