用于Web应用程序的Mutli-instance与单实例

时间:2016-09-01 14:40:58

标签: php web-applications multi-tenant

我打算建立一个销售和财务Web应用程序。应用程序将包含客户的一些敏感信息。所以,我决定采用Isolated方法进行数据库并将数据库分开。但是,我在单个实例和多个应用程序实例之间感到困惑。让我详细介绍一下我的申请。

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

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

    谢谢。

1 个答案:

答案 0 :(得分:2)

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

您的产品实体将包含每种产品的所有常见属性(可能是名称,可能是其他产品)。

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

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数组来显示字段。

我认为这是实现产品模块的最简单方法。