- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在一个小团队工作,设计一个流程管理系统,供同一行业内的几个不同客户使用。系统的目标和客户的高水平要求非常相似。然而,正如预期的那样——一旦我们开始深入挖掘他们的个人需求,我们最终会为每个客户进行一些相当广泛的定制,涉及几乎所有内容,包括数据、输入表单、验证、工作流程、报告等。
将所有这些加起来,我们意识到 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 schema
和 good routing ([AngularJS routing ][2]) design
将帮助您将其保留为单个 Multi-Tenancy 应用程序,您可以在产品的整个生命周期内对其进行管理。
关于AngularJS Multi-Tenancy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345863/
对于我积极维护的客户基于 Web 的 CRM 的分支机构数量不断增加的 Multi-Tenancy ,我需要做出一个艰难的数据库设计决策。 我很早就决定为每个分支使用具有单独数据库的单独应用程序,因为
在 Spring 3 应用程序中,我试图通过 Hibernate 4 的原生 MultiTenantConnectionProvider 实现 Multi-Tenancy 。和 CurrentTena
在neo4j中实现 Multi-Tenancy 的最佳方法是什么? 我看过 Tinkerpop 和 Spring Data。 我有多个客户端,我想将客户端信息存储在自己的数据库中以确保安全。 我不想使
我正在一个小团队工作,设计一个流程管理系统,供同一行业内的几个不同客户使用。系统的目标和客户的高水平要求非常相似。然而,正如预期的那样——一旦我们开始深入挖掘他们的个人需求,我们最终会为每个客户进行一
我们正在开发一个“中间层”来替换现有的业务逻辑/数据访问层。我们面临的设计问题之一是,我们需要以一种允许多个客户的数据库和/或中间层部件作为我们托管产品的一部分存在于同一服务器上的方式进行设计。托管环
我有一个非常简单的项目,其中包含一个具有以下 models.py 的应用程序: class UserAccount: user = models.OneToOneField(User)
在我的应用程序中,我想为不同的客户实现 Multi-Tenancy 支持。 我有一个节点树,希望为不同的客户实现私有(private)树的支持。 Neo4j 是否支持 Multi-Tenancy ,或
我似乎找不到任何关于具有多个数据库的 Grails Multitenancy(每个租户一个)的更新资源/指南、插件或示例。我目前被困在 https://grails.org/plugin/multi-
在我的 Laravel 项目中,我使用了 Multi-Tenancy 。对于项目相关的工作,我正在创建一个 laravel 自定义 artisan 命令。我正在尝试在我正在创建的那个 artisan
我想实现 OKTA API 来管理 Multi-Tenancy 环境中的身份验证和 SSO。 每个用户都应该链接到一个租户,并且每个租户都应该配置身份验证策略。有没有办法实现这一目标? 最佳答案 Ok
我在网上阅读了几篇关于 Multi-Tenancy (针对 SaaS 应用程序中的不同客户)的文章(即 this 和 that 和 that)。一旦您决定采用基于鉴别器的方法,hibernate do
我有几个客户端使用的数据库。我真的不希望代理增量键值在客户端之间流血。我希望编号从1开始,并且要针对客户。 我将使用tenant_id的两部分组合键以及增量ID。 为每个租户创建增量 key 的最佳方
我正在开发一个定制的CRM解决方案,该解决方案将通过Web/SaaS模型出售。我预计会有数十或数百个客户使用此解决方案。我将使用MS SQL作为数据库引擎。 选项1是拥有一个数据库,并在表上包括一个T
我开始设计 Multi-Tenancy 系统并且已经阅读了这篇文章: http://msdn.microsoft.com/en-us/library/aa479086.aspx 无论如何,我有几个与身
我正在考虑在 Multi-Tenancy 应用程序中使用 Solr,我想知道是否有任何最佳实践或需要注意的事项? 一个特别的问题是每个租户拥有一个 Solr Core 是否有意义。有大量的 Solr
由于我对 redis 还很陌生,因此我正在尝试探索各种选项,看看如何使用 redis 实现 Multi-Tenancy 。 我在 redisLabs 官方页面上阅读了一些文档,看起来 redis 集群
我们有一个应用程序,可以在 Multi-Tenancy 工作区的服务器上执行大量数据繁重的工作。 以下是它所做的事情: 它从不同文件格式的文件加载数据。 根据定义的逻辑执行幂等规则。 执行处理逻辑,例
我们有一个 Multi-Tenancy Azure 广告应用程序,该应用程序在某些其他租户中不可见。是否有允许第三方应用程序的租户级别设置? 我们从 azure cli 运行以下命令来查看 hte 应
我尝试登录 Azure AD Web 应用程序,当我使用租户内的用户登录时,就可以了,但是当登录其他用户时我得到 AADSTS50020:来自身份提供商“live.com”的用户帐户“********
我正在将 Firebase 视为 MVP Multi-Tenancy 应用的后端。该应用程序将为每个租户提供完全白标,每个租户都注册自己的用户群。肯定会有交叉,用户可以注册多个租户,但是我似乎看不到
我是一名优秀的程序员,十分优秀!