首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS多租户

AngularJS多租户
EN

Stack Overflow用户
提问于 2014-10-13 17:47:07
回答 1查看 5K关注 0票数 13

我正在一个小组工作,设计一个过程管理系统,供同一行业中的几个不同的客户使用。系统的目标和客户的高层次需求非常相似。然而,正如预期的那样--一旦我们开始深入了解他们的个人需求,我们就会为每一个客户提供一些非常广泛的定制,涉及的内容几乎包括数据、输入表单、验证、工作流、报告等。

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

因此,在后端(大部分是平方)的情况下,我们已经将注意力转向了前端,在这里,我们真的很难在AngularJS中实现类似的多租户方法。部分问题在于我们对角度的认识相对较新。我们有一些使用标准“文件夹模式”构建单用途应用程序的经验,但是当我们在这里查看我们的多租户需求时,我们真的很难将所有东西(一般的项目结构/路线/视图)联系在一起,以支持AngularJS中与后端(支持重用、灵活性和定制的单个代码库)相同的多租户设计目标。对于每个租户来说,模块模式似乎是一个很好的“插入”自定义功能的选项,但我们仍然缺少的是一种整体架构方法,它为我们提供了一个支持上述目标的单一AngularJS代码库。有任何AngularJS专业人士能帮助我们渡过难关并在这里推荐一种方法吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-10-17 04:39:43

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

多租户客户端Web应用程序将具有以下变量,其中大部分您已经提到过。对于如何进行,您应该采取两种广泛的方法。

预先列出以下每一个变量的变化情况(尽可能多)。

如果您认为跨租户的变量中的变量是处理所有租户的 create 1应用程序。manageable是什么?您可以按照下面变量部分中的变量处理变量进行一次练习。看看你能不能用metadata来驾驶东西。理解这一点的方法是了解每个变量在租户之间的变化。

方法b)如果你认为这些变化太多,可以重新考虑使用这些独立的应用程序。当你走的时候,你可能会发现一些共同点。您可以将该代码重新分解为一个通用模块,并将其作为保龄球(私有)构件公开。

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

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

2)数据--如果JSON不同--您就有问题了。我建议只采用办法b)。如果你看到一些字段,added+subtracted,你很好。强烈建议创建JSON模式。

3)输入表单我建议从JSON +一些元数据驱动表单。对于租户变体,您能使用大量ng-if、ng-开关的相同AngularJS templete吗?如果没有,则选择单独的表单。你最终会有太多这样的“独立表格”吗?然后你回到接近b)。

4)表单验证

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

5)工作流--如果您看到每个客户端路由逻辑都在变化--使用角度路由器,并为每个租户定义路由。

6)报告,假设这些视图是为每个租户量身定做的。它们有多大的不同?如果您可以使用ng- If /ng-开关而不混淆模板,那么就可以创建单独的模板,视图(路由可以处理视图)。

7) i18n/110 n AngularJS有许多实用程序,如$locale、ngPluralize、各种过滤器,如货币、数据、数字。结帐AngularJS i18n

总之,良好的metadata设计、Validation decorated JSON schemagood routing ([AngularJS routing ][2]) design将帮助您将其保持为一个多租户应用程序,您可以通过该产品的良好生命周期来管理它。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26345863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档