Architecture 设计一套产品,同时只构建/维护一套

Architecture 设计一套产品,同时只构建/维护一套,architecture,Architecture,将有一个应用程序,将做3件大事A,B和C。这将是一个C#winforms应用程序 我们的首席执行官希望将此应用程序分为6种不同的产品 只是一个(简单的) A+B(高级) A+B+C(最终版) 所有这些都适用于一个用户或多个用户(许可)。因此,我们现在有6个项目 如果我们假设这三个主要部分确实是分离的,并且可以独立工作,那么我们如何才能维持一个项目并销售6个 目前,我想到了实现这一目标的三种方法: A:有一个基本的主干,并将A、B、C中的每一个构建为一个模块。这样我们只需要处理一个/多个用户的

将有一个应用程序,将做3件大事<代码>A,
B
C
。这将是一个C#winforms应用程序

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

  • 只是一个(简单的)
  • A+B(高级)
  • A+B+C(最终版)
所有这些都适用于一个用户或多个用户(许可)。因此,我们现在有6个项目

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

目前,我想到了实现这一目标的三种方法:

A:有一个基本的主干,并将A、B、C中的每一个构建为一个模块。这样我们只需要处理一个/多个用户的问题

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

C:创建一个版本控制机制,该机制将被设置为允许应用程序具有某些功能。这是最容易做到的,但有两个缺点。它很容易破解,我们为一个简单的用户提供了最终版本,这很糟糕

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

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

1)模块化-A和B方法之间的决策很困难。首先,根据应用程序在UI中向用户呈现的方式和应用程序底层架构中的模块化来区分模块化很重要。(业务逻辑、数据层等),同时确认第二个反映了第一个。AFAIK WinForms不提供非常严格的表示层和业务层分离,您需要做一些额外的工作来更好地分离这些层,以便在UI中具有灵活性,而无需重写大量代码。这意味着,如果您将业务层设计为严格反映“UI模块”。您将被它所束缚,然后根据销售情况来调整模块可能会更容易。但是,如果您想在将来保持灵活性,可以通过预处理器指令分离层并分别关闭每个功能

2) 终端产品与生产产品的对比-您可能会有不同的终端产品或包含A或A+B、1个用户或多个用户等的构建,这并不意味着您需要这样划分代码和作业。Visual Studio允许您为不同的“发布”构建创建模板,包含或不包含这个或那个模块或功能