设计一套产品,同时建立/维护一个产品

时间:2012-04-13 14:04:29

标签: architecture

将有一个应用程序将执行3个主要的事情。 ABC。它将是一个C#winforms应用程序。

我们的首席执行官希望将此应用程序分为6种不同的产品。

  • 只是A(简单)
  • A + B(高级)
  • A + B + C(终极)

以及一个用户或多个用户(许可)的所有这些。因此,我们现在有6个项目!

如果我们假设这三个主要部分确实是分开的并且可以独立工作,那么我们如何维护一个项目并销售6个?

目前有三种方法可以实现这一点,我想到了:

A:拥有基本骨干,并将A,B,C中的每一个构建为模块。这样我们只需处理-one / many users-问题。

B:创建一个可靠的产品,并使用预处理程序指令在编译时设置功能。这真的很难,让代码难看。此外,可能会破坏项目。

C:创建一个版本控制机制,将其设置为允许应用程序上的某些功能。这是最容易的,但有两个缺点。它很容易破解,我们为Simple用户提供Ultimate版本,这很糟糕。

与此类似的是Windows版本问题(Home,Basic,Pro,Ultimate)

我们应该如何设计这个项目?

1 个答案:

答案 0 :(得分:1)

1)模块性 - A和B方法之间的决策很难。首先,根据应用程序如何在UI中呈现自己与用户以及应用程序底层架构中的模块化来区分模块化非常重要。 (业务逻辑,数据层等)同时承认第二个反映了第一个。 AFAIK WinForms不提供非常严格的表示层和业务层分离,您需要做一些额外的工作来更好地分离层,以便在UI中具有灵活性,而无需重写大量代码。这意味着如果您设计业务层以严格反映“UI模块”..您将坚持使用它然后根据销售可能更容易转换模块。但是,如果您希望将来保持灵活性,请将这些层分开,并通过预处理程序指令单独关闭每个功能。

2)最终产品与生产 - 您可能拥有不同的最终产品或构建包含A或A + B,1个用户或许多用户等...这并不意味着您需要将代码和作业分开.Visual Studio允许您确保为不同的“发布”版本创建模板,这些模板将包含或不包含此模块或功能。