我现在有一些基于Web的大型多租户产品,很快我就会发现会有很多针对租户的自定义设置。
这里或那里的额外字段,可能是工作流程中间的额外页面或某些额外的逻辑-诸如此类。
其中一些自定义项可以纳入核心产品,这很棒。其中一些是非常具体的,并且会妨碍其他人。
我有一些想法可以解决这个问题,但是似乎没有一个很好的扩展。显而易见的解决方案是引入大量的客户端级别设置,从而允许基于每个客户端启用各种“功能”。这样做的缺点当然是庞大的复杂性和混乱性。您可能会引入大量的设置,并且随着时间的流逝,各种类型的逻辑(演示,业务)可能会失控。然后是特定于客户的字段的问题,这比起在现有表中添加一堆可以为空的字段来讨价还价。
那么人们在做什么来管理呢?Force.com似乎是可扩展性的主人。显然,他们已经从头开始创建了一个超级可扩展的平台。您可以使用其基于Web的用户界面添加几乎所有内容。FogBugz做了一些类似的事情,他们创建了一个健壮的插件模型,考虑到它,可能实际上是受Force启发的。我知道他们在上面花了很多时间和金钱,如果我没记错的话,目的是在内部实际使用它来进行未来的产品开发。
听起来像我可能会尝试构建的那种东西,但可能不应该这样做。:)
在可插拔架构上进行大量投资是唯一的方法吗?您如何处理这些问题,并且看到了什么样的结果?
编辑:看起来FogBugz确实通过构建一个相当健壮的平台,然后使用它来组装屏幕来解决了该问题。要扩展它,您将创建一个包含实现ISearchScreenGridColumn之类的接口的类的DLL,该DLL成为一个模块。考虑到他们拥有大量的开发人员,并且他们从事了几个月的开发工作,我确信构建起来非常昂贵,而且它们的表面积可能是我应用程序大小的5%。
现在,我很想知道Force.com是否是处理此问题的正确方法。我是ASP.Net的核心人物,所以这是一个很奇怪的职位。