我有一个现有的MVC应用程序,将在不久的将来由另一个用户组使用。现有用户组和新用户组/程序都将具有独立的数据。我只是想在表中添加标志来区分两个用户组/程序,并在访问应用程序时进行一些路由以提取相应的数据。
现在谈到代码自定义时,例如,一个组/程序希望在第一个组不需要的页面上有额外的字段,或者应用程序的处理流程在两个用户组之间分开。
如果上述两种情况经常发生,我应该只做一个新的Web和数据库实例,而不是为每个程序/用户组自定义代码。这样,我的两个客户/用户组都可以灵活地向应用程序添加不同的逻辑/字段。
我对非多租户方法的唯一看法是开发人员花费时间来维护两个单独的应用程序。我害怕添加contional逻辑来为每个不同的用户组/程序定制相同的代码库。基础设施的成本不是问题。此外,我并不认为此应用程序可以随时被超过2个用户组/程序使用。那么你们认为我应该采取哪些措施以及为什么呢?谢谢所有提前
P.S用户不会试图破解网站以查看其他租户数据的任何忍者。他们是企业用户。 Theyd而不是使用这个应用程序,而是它的一部分,所以他们必须使用它。
答案 0 :(得分:3)
值得一看微软的article多租户。
我也在尝试设计一个具有这样一种架构的mvc应用程序,其中每个客户端都可以有单独的字段和自定义屏幕。
我得出的结论是,使用具有多租户支持的IOC容器可能会使整个事情变得更容易。
Autofac已内置multi-tenancy support。
就每个视图中的客户端逻辑而言,我相信如果沿着IOC路径走下去,你可以为每个租户配备一个控制器,在这种情况下,硬编码这样的客户端特定逻辑并不一定像它那样糟糕。将它硬编码到共享控制器中。从本质上讲,我相信在为特定租户编写组件时,您可以将思维转换为写作,就好像该租户是唯一使用该系统的人一样。
我为定制视图而采用的另一个解决方案是对编译视图使用RazorGenerator方法的变体,其中我将每个租户视图编译到一个单独的程序集中并创建了我自己的视图引擎(基于this)我可以根据路由参数中的值替换我查找视图的程序集。
当然,我仍然在探索这种方法,并没有完全刷新它以找出它可能不足的地方。
答案 1 :(得分:2)
如果2个用户的要求差异超过屏幕/功能的10%,那么最好有2个数据库和应用程序。如果预期小于10%,那么只需在功能不同的地方编写单独的操作(可能在Action名称中使用不同的前缀或后缀)。