Web 应用程序的多实例与单实例

Mutli-instance vs Single-instance for web application

我打算构建一个销售和财务 Web 应用程序。应用程序将包含客户的一些敏感信息。因此,我决定对数据库采用隔离方法,并将它们的数据库分开。但是,我对应用程序的单实例和多实例感到困惑。让我详细介绍一下我的申请。

  1. 应用程序会定期更新,例如将来会添加新功能。
  2. 每个客户都可以选择购买应用程序中的所有模块,或者他可以选择对他有用的特定模块。因此,通过这种方式,每个客户都可以 select 我们提供的任何模块,例如他可以购买 2 个模块,也可以购买所有模块。
  3. 还有一个自定义选项。客户可以要求添加一个新模块来满足他的需求,当然也会有一些限制。
  4. 每个客户都有单独的 url。
  5. 会有一个产品模块,用户可以在其中添加他的产品(注意:这不是电子商务网站),每个客户都来自不同的行业,因此他们的产品规格要求会有所不同。例如:如果一位客户来自化妆品行业,那么他的产品实体将是名称、颜色、数量,如果另一位客户来自食品行业并销售饼干,他的产品实体将是名称和风味。所以,在这种情况下,如果我为所有人保留单个应用程序实例,那么我怎么可能为每个客户提供具有不同字段的产品模块。

因此,对于此类应用程序,我正在考虑使用单实例应用程序,即所有应用程序的一个实例,但我想听取专家的建议。

请为我的申请建议什么是正确且最有效的选择。

谢谢。

对于您的产品模块,解决方案是让您的用户自行配置他们的产品:

您的产品实体将包括每个产品存在的所有通用属性(可能是名称,也可能是其他)。

然后对于所有特定字段,创建一个保留这些字段的中间实体。

class Product
{
    /**
     * @var int
     */
    private $id;

    /**
     * @var string
     */
    private $name;

    /**
     * @var array
     */
    private $customFields;

    // ...
}

class CustomField
{
    /**
     * @var int
     */
    private $id;

    /**
     * @var string
     */
    private $fieldName;

    /**
     * @var string
     */
    private $fieldValue;

    // ...
}

这样,您的客户将定义他们产品的属性,而您只需遍历 $customFields 数组即可显示字段。

我认为这是实现您想要为产品模块做的事情的最简单方法。