我们正在开发SaaS应用程序,目前面临不同客户要求进行不同定制的情况。我已经谷歌搜索了很多关于Multitenancy的内容。我也熟悉Strategy Pattern。
但这仍然让我对Angular 2+应用程序的一个好概念感到困惑。业务逻辑不会成为问题,因为我可以使用Angular的依赖注入来为不同的客户加载和使用定制服务。主题本身并不是问题,因为我们使用Angular Material内置了一个很好的主题引擎。让我头疼是模板本身。当然,我可以在HTML模板中使用*ngIf
和*ngSwitch
,但这正是我想要避免的代码,因为一旦达到50多个客户版本,它就会变得可怕。
让我们有一个真实的例子。在搜索页面上,所有客户都可以搜索对象并将单个对象导出为文件下载。一位特定客户要求以专有文件格式实现批量导出,该页面需要一个新按钮,显然所有其他客户都看不到。
我可以为这种情况考虑的三个选项(我都不喜欢)如下:
*ngIf
和/或*ngSwitch*
display: none;
)所有这些都有明显的结论,仅举几例:
我相信我们不是第一个解决这个问题的人。我是否在监督任何缺点较少的解决方案?我可以在这里使用任何代码模式吗?
编辑:在我们公司进行更多讨论之后,我们意识到还有另一个要点:一些客户托管在他们自己的服务器上,但大多数客户都是从一台中央服务器提供服务。这意味着必须在运行时检测并添加可选功能,这意味着某种尴尬。
因此,我们的方法是扩展现有的许可数据库,以包含客户特定的功能,然后显然只有该客户拥有许可证。现在,简单的解决方案是拥有许可证端点并获得客户获得的所有许可证,然后每个可选功能都可以只放在一个简单的单*ngIf
中。我很欣赏这是一个简单而干净的解决方案,但它提供了查找有关我们公司其他客户的一些商业事实的潜力(通过对代码进行非混淆并找到其他端点等)。因此,将此与服务器端渲染相结合可能是我现在能够想到的最佳解决方案。
答案 0 :(得分:1)
当然,我没有一个完全适合你场景的明确解决方案,但这是一个想法。
我之前使用相同的方法来定制基于幻灯片模板的设计工具箱(如powerpoint幻灯片模板)。
至于你提到的选项,这是我的2美分:
我希望这会有所帮助。