Web 应用程序的多实例与单实例
Mutli-instance vs Single-instance for web application
我打算构建一个销售和财务 Web 应用程序。应用程序将包含客户的一些敏感信息。因此,我决定对数据库采用隔离方法,并将它们的数据库分开。但是,我对应用程序的单实例和多实例感到困惑。让我详细介绍一下我的申请。
- 应用程序会定期更新,例如将来会添加新功能。
- 每个客户都可以选择购买应用程序中的所有模块,或者他可以选择对他有用的特定模块。因此,通过这种方式,每个客户都可以 select 我们提供的任何模块,例如他可以购买 2 个模块,也可以购买所有模块。
- 还有一个自定义选项。客户可以要求添加一个新模块来满足他的需求,当然也会有一些限制。
- 每个客户都有单独的 url。
- 会有一个产品模块,用户可以在其中添加他的产品(注意:这不是电子商务网站),每个客户都来自不同的行业,因此他们的产品规格要求会有所不同。例如:如果一位客户来自化妆品行业,那么他的产品实体将是名称、颜色、数量,如果另一位客户来自食品行业并销售饼干,他的产品实体将是名称和风味。所以,在这种情况下,如果我为所有人保留单个应用程序实例,那么我怎么可能为每个客户提供具有不同字段的产品模块。
因此,对于此类应用程序,我正在考虑使用单实例应用程序,即所有应用程序的一个实例,但我想听取专家的建议。
请为我的申请建议什么是正确且最有效的选择。
谢谢。
对于您的产品模块,解决方案是让您的用户自行配置他们的产品:
您的产品实体将包括每个产品存在的所有通用属性(可能是名称,也可能是其他)。
然后对于所有特定字段,创建一个保留这些字段的中间实体。
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
数组即可显示字段。
我认为这是实现您想要为产品模块做的事情的最简单方法。
我打算构建一个销售和财务 Web 应用程序。应用程序将包含客户的一些敏感信息。因此,我决定对数据库采用隔离方法,并将它们的数据库分开。但是,我对应用程序的单实例和多实例感到困惑。让我详细介绍一下我的申请。
- 应用程序会定期更新,例如将来会添加新功能。
- 每个客户都可以选择购买应用程序中的所有模块,或者他可以选择对他有用的特定模块。因此,通过这种方式,每个客户都可以 select 我们提供的任何模块,例如他可以购买 2 个模块,也可以购买所有模块。
- 还有一个自定义选项。客户可以要求添加一个新模块来满足他的需求,当然也会有一些限制。
- 每个客户都有单独的 url。
- 会有一个产品模块,用户可以在其中添加他的产品(注意:这不是电子商务网站),每个客户都来自不同的行业,因此他们的产品规格要求会有所不同。例如:如果一位客户来自化妆品行业,那么他的产品实体将是名称、颜色、数量,如果另一位客户来自食品行业并销售饼干,他的产品实体将是名称和风味。所以,在这种情况下,如果我为所有人保留单个应用程序实例,那么我怎么可能为每个客户提供具有不同字段的产品模块。
因此,对于此类应用程序,我正在考虑使用单实例应用程序,即所有应用程序的一个实例,但我想听取专家的建议。
请为我的申请建议什么是正确且最有效的选择。
谢谢。
对于您的产品模块,解决方案是让您的用户自行配置他们的产品:
您的产品实体将包括每个产品存在的所有通用属性(可能是名称,也可能是其他)。
然后对于所有特定字段,创建一个保留这些字段的中间实体。
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
数组即可显示字段。
我认为这是实现您想要为产品模块做的事情的最简单方法。