【问题标题】:Changing winform app for specific clients为特定客户更改 winform 应用程序
【发布时间】:2012-04-06 17:43:10
【问题描述】:

我有一个 winforms 应用程序。我把它给了三个客户,每个客户都想要一个专门针对他们的小调整或定制。为此,我必须为每个客户保留一个单独的版本。我可能会以这种方式完成许多版本。我认为依赖注入将是如何处理这个问题,但我听说您必须在 main 方法中注册您的依赖项,并且您仍然必须添加对每个客户端 DLL 的引用,所以我仍然需要不同的版本。处理此问题的首选面向对象方法是什么?有没有更好的方法来处理这个问题?

【问题讨论】:

  • 听起来你没有为这些定制收取足够的钱。
  • 存储很便宜。无论如何,接口应该与业务逻辑分开。如果他们要求自定义业务逻辑,那应该是一个分支,老实说我不明白这个问题。

标签: c# oop agile software-design


【解决方案1】:

您可以使用Plug-in patten 在运行时加载程序集:(来自链接)

当应用程序代码在多个运行时环境中运行时,通常使用分离接口 (476),每个运行时环境都需要特定行为的不同实现。

大多数 DI 框架都提供此功能。如果您不想 roll your own,您可以在 get很多示例中搜索您选择的框架。

  1. Ninject
  2. MEF

【讨论】:

    【解决方案2】:

    您可以使用配置文件来配置您的 DI 容器,这样您就可以使用不同的配置文件重复使用相同的二进制文件来实现不同的自定义。但是您需要确保彻底测试所有不同的配置。同一应用程序的稍微不同的版本在不导致意外中断的情况下维护并非易事。

    【讨论】:

      【解决方案3】:

      根据自定义的性质,您可能能够将所有相关修改捕获到项目的不同部分(而不是将它们分散在整个项目中)。如果可以(例如,客户端提供了归档功能),您可以动态加载 DLL(例如,基于配置文件)并允许 DLL 中的函数执行完成自定义的必要功能(基于参数由主代码提供)。

      通过这种方式,您可以为您的代码提供预定义的挂钩,这些挂钩可以根据客户端的需要动态更改(即使只是在启动时加载 dll)。如果客户端想要更改不同的功能,您可以将这些 DLL 分成多个,但不一定所有客户端都需要更改所有功能。然后,您可以提供 DLL 的“默认”版本。

      谁开发钩子取决于您与客户的设置。

      确保您提供足够的文档说明这些钩子应该如何工作——即使您最终开发了它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-31
        相关资源
        最近更新 更多