gpt4 book ai didi

AngularJS Multi-Tenancy

转载 作者:行者123 更新时间:2023-12-03 23:47:45 28 4
gpt4 key购买 nike

我正在一个小团队工作,设计一个流程管理系统,供同一行业内的几个不同客户使用。系统的目标和客户的高水平要求非常相似。然而,正如预期的那样——一旦我们开始深入挖掘他们的个人需求,我们最终会为每个客户进行一些相当广泛的定制,涉及几乎所有内容,包括数据、输入表单、验证、工作流程、报告等。

将所有这些加起来,我们意识到 Multi-Tenancy 架构可能是实现这一目标的最佳方法。后端远远超出了设计范围,它是一个 .net 中的 RESTful api,由 ServiceStack、RavenDB 和 Sql Server 构建。任何熟悉 ServiceStack 的人都会知道它非常灵活,并且在构建时考虑了可插拔性——这使得实现 Multi-Tenancy REST api 比我们预期的要容易得多。我们使用一个非常简单的约定,通过检查 session 中属于每个请求的值来识别和授权租户(所有“特定于租户的”请求都必须经过身份验证,因此始终有可用的 session )。因此,目前几乎不需要在任何路由 url 中跟踪或传递来自客户端的租户 ID。因此,对于后端 api,我们已经实现了我们的设计目标,即拥有一个支持不同客户的单一代码库,具有大量代码重用和根据需要自定义/扩展租户特定功能的灵 active 。

因此,由于后端大部分都被摆平了,我们将注意力转向了前端,我们真的在努力在 AngularJS 中实现类似的 Multi-Tenancy 方法。部分问题在于我们对 Angular 比较陌生。我们有一些使用标准“文件夹模式”构建单一用途应用程序的经验,但是当我们在这里查看我们的 Multi-Tenancy 需求时,我们真的很难将所有内容(一般项目结构/路线/ View )联系在一起以支持相同的 Multi-Tenancy - 我们通过后端实现的 AngularJS 中的租户设计目标(支持重用、灵 active 和定制的单一代码库)。 module pattern似乎是为每个租户“插入”自定义功能的一个很好的选择,但我们仍然缺少一个整体架构方法,它为我们提供了一个支持上述目标的单一 AngularJS 代码库。任何 AngularJS 专业人士都可以帮助我们克服困难并在这里推荐一种方法吗?

谢谢!

最佳答案

这是一个设计问题,所以我的回答将是高水平的。

Multi-Tenancy 客户端 Web 应用程序将具有您已经提到的大部分变量。对于如何进行,您应该采取两种广泛的方法。

预先(尽可能多地)列出下面列出的每个变量的变化。

方法 a) 如果您认为跨租户变量的变化是 manageable创建 1 个处理所有租户的应用程序。什么是manageable ?您可以按照 进行一项练习处理变量中的变化下面的部分。看看你能不能通过 metadata 开车.这可以通过了解每个变量的租户之间的变化来理解。

方法 b) 如果您认为变化太多,请重新考虑制作这些单独的应用程序。随着你的前进,你可能会发现一些共同点。您可以将该代码重构为一个公共(public)模块,并作为一个凉亭(私有(private))工件公开。

方法 a) 处理变量中的变化

1) 外观和感觉 - 皮肤
每个租户使用一个 CSS。

2) 数据
如果 JSON 模式不同,您就会遇到问题。我建议只使用方法 b)。
如果您看到添加+减去某些字段,那您很好。
强烈建议创建 JSON 模式。

3) 输入表格
我建议从 JSON Schema + 一些元数据驱动表单。
您是否可以将相同的 AngularJS 模板与大量 ng-if、ng-switch 用于租户变化?如果没有,那就去单独的表格。您是否以太多这样的“单独表格”而告终?然后你回到方法b)。

4) 表单验证

您可以使用 JSON 模式并使用验证属性进一步装饰它。 (不知道您的堆栈提供什么,但在 Java Bean 验证注释中非常方便 - 您可以在构建时将它们外部化并将它们与客户端捆绑在一起,以便表单输入字段可以从模式驱动实用地应用验证。)

5) 工作流程
如果您看到每个客户端的路由逻辑发生变化 - 使用 Angular 路由器并为每个租户定义路由。

6) 举报
假设这些是为每个租户量身定制的一些 View 。它们有多少不同?如果您可以使用 ng-if/ng-switch 而不会弄乱模板,那么您可以创建单独的模板、 View (路由可以处理 View )。

7) i18n/l10n
AngularJS 有很多实用程序,例如 $locale、ngPluralize,以及各种过滤器,例如货币、数据、数字。结帐AngularJS i18n

总之不错metadata设计, Validation decorated JSON schemagood routing ([AngularJS routing ][2]) design将帮助您将其保留为单个 Multi-Tenancy 应用程序,您可以在产品的整个生命周期内对其进行管理。

关于AngularJS Multi-Tenancy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345863/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com