intranet上的多租户或多实例应用程序

本文关键字:实例 应用程序 intranet | 更新日期: 2023-09-27 17:59:32

我有一个现有的MVC应用程序,它将在不久的将来由另一个用户组使用。现有和新的用户组/程序都将具有独立的数据。我只是想在表中添加标志,以区分两个用户组/程序,并在它们访问应用程序以提取各自的数据时进行一些路由。

现在,当涉及到代码自定义时,例如,一个组/程序希望在页面上有第一个组不希望的额外字段,或者应用程序的流程在两个用户组之间是分开的。

如果以上两种情况会频繁发生,我是否应该只做一个新的web和数据库实例,而不是为每个程序/用户组自定义代码。这样,我的两个客户/用户组都可以灵活地向应用程序添加不同的逻辑/字段。

我看到的非多租户方法的唯一缺点是开发人员维护两个独立应用程序所花费的时间。我害怕添加连续逻辑来为每个不同的用户组/程序定制相同的代码库。基础设施成本不是问题。此外,我不认为这个应用程序在任何时候都会被两个以上的用户组/程序使用。你们觉得我应该采取哪种方式,为什么?提前感谢

p.S这些用户并不是任何会试图破解该网站以查看其他租户数据的忍者。他们是公司用户。他们宁愿不使用这个应用程序,但它是流程的一部分,所以他们必须使用它。

intranet上的多租户或多实例应用程序

值得一看微软关于多租户的文章。

我也在尝试设计一个mvc应用程序,该应用程序具有这样的架构,每个客户端都可以有单独的字段和定制的屏幕。

我得出的结论是,使用一个有多租户支持的国际奥委会集装箱可能会让整个事情变得容易得多。

Autofac内置了多租户支持。

就在每个视图中为客户端提供逻辑而言,我相信,如果你走IOC的道路,你可以为每个租户提供一个控制器,在这种情况下,对这种特定于客户端的逻辑进行硬编码并不一定像将其全部硬编码到共享控制器中那样糟糕。从本质上讲,我相信,当为特定租户编写组件时,您可以将心态转换为编写,就好像该租户是唯一使用该系统的租户一样。

我为自定义视图找到的另一个解决方案是对已编译视图使用RazorGenerator方法的变体,在该方法中,我将每个租户的视图编译成一个单独的程序集,并创建了自己的视图引擎(基于此),在该引擎中,我可以根据布线参数中的值来交换我查找视图的程序集。

当然,我仍在探索这种方法,还没有完全清除它,以找出它可能不足的地方。

如果两个用户的需求差异超过屏幕/功能的10%,那么你最好有两个数据库和应用程序。如果它预计小于10%,那么只需为功能不同的地方编写单独的操作(可能在操作名称中使用不同的前缀或后缀)。