【问题标题】:Programming Modular software编程模块化软件
【发布时间】:2010-10-26 18:21:39
【问题描述】:

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

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

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

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

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

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

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

你们能给我一些关于这个问题的指点或例子吗?

这一切都在 C# 中,但如果看看它在 Java、Python 或 C++ 中的不同之处当然会很有趣。

【问题讨论】:

    标签: c#


    【解决方案1】:

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

    【讨论】:

    • MEF +1。我已经将它用于大学的一个学生项目,它使整个模块/插件的东西变得非常容易。
    • 我不想使用任何预先构建的东西,我想为自己创建一个小而简单的系统。但他们的架构可能很有趣。看看这个问题在 c++、python、java 或任何其他语言中有何不同仍然会很整洁。
    【解决方案2】:

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

    或者,您的应用必须符合某些接口并使用hooks 供模块用于将自身注入到您的应用中。

    插件适用于可以轻松分割的东西(媒体编解码器)。 Hooks 适用于具有明确定义的事件模型(如 Web 服务器)的东西。您使用哪一种取决于您希望客户、发票等的模块化如何发挥作用。

    【讨论】:

    • 这将是最好的答案,如果它有一些代码示例以及 c++、java、c# 和 python 之间的比较。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 2016-06-23
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2012-07-29
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多