0

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

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

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

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

PS 用户没有任何忍者会试图入侵该网站以查看其他租户的数据。他们是企业用户。他们宁愿不使用这个应用程序,而是使用它的一部分,所以他们必须使用它。

4

2 回答 2

3

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

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

我得出的结论是,使用支持多租户的 IOC 容器可能会使整个事情变得容易得多。

Autofac 内置了多租户支持

就每个视图中的客户端逻辑而言,我相信如果你沿着 IOC 路径走,你可以为每个租户拥有一个控制器,在这种情况下,硬编码这样的客户端特定逻辑并不一定像拥有它那样糟糕将所有内容硬编码到共享控制器中。本质上,我相信在为特定租户编写组件时,您可以将思维转变为编写,就好像该租户是唯一使用该系统的人一样。

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

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

于 2013-02-15T06:22:04.843 回答
2

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

于 2013-02-15T05:59:17.237 回答