编程模块化软件

时间:2009-05-16 19:29:41

标签: c#

我站在一个小问题面前; 我想创建一个模块化软件。

让我们更一般,而不是针对我的情况。我想要创建的是一个加载dll的软件,这些dll为软件添加了功能。

将dll视为xvid,divx或其他任何编解码器,是您喜欢的视频播放器的功能。我想要一个更自定义的模块化程序,在我的情况下,我正在创建一个软件来处理客户,发票和产品,不同的用户可能有不同的需求,因此我需要以某种方式处理它!

然而,重新编译软件并特别是将新文件发送给每个不同的用户是“愚蠢的”我宁愿创建一个模块化软件(实际上并不知道这是否是正确的术语)。

所以我想的是我开始创建一个我的DLL应该遵循的模式。

然后我在我的软件中创建一个模块处理程序,它加载了实际DLL并调用其中的方法(这里是模式进入的地方!)。

我想知道的是;我是在正确的轨道上吗?

你们可能会就此事给我一些指示或示例吗?

这一切都在C#中,但当然有趣的是看它在Java,Python或C ++中会有什么不同。

3 个答案:

答案 0 :(得分:3)

为您的类创建一个公共接口IMyInterface,其中应包含所有Modual之间通用的所有内容。你应该查看Managed Extensibility Framework我相信你可以从Codeplex获得它。

答案 1 :(得分:2)

你必须有目的。您需要模块符合某种界面或应用程序可以处理的内容(例如,通过反射找到的具有已知属性的方法)。然后,界面执行已知功能,如发票创建,发票打印等。

或者,您的应用必须符合某些界面,并使用hooks模块用于将自身注入您的应用。

插件对于可以轻松切片的东西(媒体编解码器)很有用。对于具有明确定义的事件模型(如Web服务器)的东西,钩子会很好。您使用哪种方法取决于您希望客户,发票等的模块化工作方式。

答案 2 :(得分:0)

这是similar SO thread。这是dependency injection frameworks的列表,Microsoft是Unity。此外,您可以查看Enterprise Library codebase以了解它们如何实现其提供程序体系结构,例如在caching application block中您可以插入自己的缓存提供程序。