您如何在Web应用程序中实现客户特定的差异?

时间:2012-02-02 10:23:04

标签: java jsf java-ee web-applications architecture

我们有一个基于Seam 2的Web应用程序,它具有通常的用户登录和一些视图,这些视图具有与本地数据库和Web服务交互的处理程序类。

现在,我们需要实现客户特定的差异 - 因此用例基本相同,但是例如客户A需要在表单上添加更多字段,客户B需要不同的Web服务调用,而客户C需要另外一个不同的角色访问权限。

我知道我的问题不是很具体 - 但我正在寻找一般的想法如何处理这样的场景,而不必维护应用程序的不同版本或在XHTML或java代码中有很多ifs得到不同的行为。

所以,因为这是一个常见的场景 - 你如何处理它?<​​/ p>

2 个答案:

答案 0 :(得分:2)

<强>字段

如果业务案例相同且字段不直接影响它,您可以选择加入用户或公司设置。所以只需一个修改布局的复选框。您应该注意的难点是必填字段的验证。因为您的客户可能会有所不同。

更进一步,您可以选择灵活的领域和所有类似的东西,但这将直接变得非常复杂。如果你不需要不去那里。

<强> ACL

ACL可以变得足够灵活,以支持每个客户的不同设置,这应该不是一个大问题。

web服务

另一个webservice:如果它是另一个webservice,但它提供相同的信息,你可以实现一个接口。这样你就可以灵活地切换每个客户。好处是您的应用程序不知道它实际上是哪个Web服务,但它了解接口。更多相关内容:去耦是关键字。

这也产生了一个可测试的软件,使您可以在未来进一步开发而不会有太多麻烦。

知道何时停止

如果定制化太过明了,请了解停止的位置。不要遇到太多困难,当客户想要客户软件时,它应该在某个时间点成为一个软件。另请参阅:http://gettingreal.37signals.com/ch05_Start_With_No.php这是非常相关的,您无法使用标准软件满足每个人。会有很多隐藏费用:http://gettingreal.37signals.com/ch05_Hidden_Costs.php

认为这给出了一个很好的概述。如果您需要更多详细信息,可以将此问题分开,因为这三个问题中的每一个都有自己的问题。

答案 1 :(得分:0)

这是软件开发中一个非常普遍的问题,没有明确的答案,所以你会发现最好的答案最终会得到建议。

我们知道的一个肮脏的小秘密是,除非您在Staples的货架上的盒子里销售软件,否则您可能只是提供隐藏真正定制软件的产品的幻觉。

因为最终在开发业务应用程序时,所有客户都希望定制构建的软件,但他们想要相信他们正在购买产品。这只是人类心理学,当我们购买产品时,我们不仅觉得我们得到了更好的交易,而且我们会更容忍轻微的瑕疵或烦恼。在购买定制的东西时,我们立即感觉我们为奢侈品付出了过高的代价,所以如果一切都没有完全符合我的要求,那将是不可接受的。

我发现处理此问题的最佳方法是让公司中的某个人具有成为产品负责人的强大权力。这个人将成为您的软件中每个功能和变化的Alpha和Omega。产品负责人的工作是将不同的,有时完全相反的客户请求缓解为一组软件需求和功能,这些功能将使大多数客户在大多数时间内感到满意。

简单地说,就问题的措辞而言,您已经想知道如何在技术上处理不同的客户要求,从而错误地解决了问题。作为开发人员,您应该关心的唯一客户是产品负责人,其职责是告诉您应该包含哪些自定义功能,设置,标志,资源包和表单以及如何翻转不同的功能打开或关闭以满足公司客户的需求。