在我们的应用程序,我们有时必须作微小的GUI修改为不同客户:

  • 一个客户有一个输入领域的其他人所没有的。
  • 另一个客户已有默认的领域,但一个《任择输入的领域是强制性的。
  • 第三个客户已经默认的领域,但一个领域都有它的标题改变了
  • 第四客户拥有多个新的输入领域和一个现有的多行输入领域已被改变为一个单一的线路输入领域(以腾出空间的新领域)
  • ...

(注:虽然这些例子可能听起来令人尴尬,这些都是东西,我们的客户要求)

你怎么处理这些案件?

  • 在一般
  • 在Java/摇摆

目前,我们设计的形式中最常见的方式。在运行时,我们作出调整喜欢隐藏、调整或重新定位的领域。在输入验证我们进行验证的内容取决于活动的客户。

有帮助吗?

解决方案

这一问题有三个方面:形式布局、数据库存储和配置的业务逻辑。

配置驱动的形式布局

一个灵活的方法来形式布局可通过移动的布局,以描述的文件。三GUI工具包,支持这个是夸脱,WPF和太.然而,据我所知摇摆不直接支持这种能力。脱碑不能让你使用夸脱Java作为一种替代的摇摆和建4.5将是提供与LGPL许可。这不是一个纯粹的java解决方案,但也可以是一种可能性,如果这及随之而来重新编写的代码是可以接受的。

优势的结构驱动的形式布局是定制可以在不具有保持一个单独的建立每个客户,所以即使你有任职者代码的基础,你可能希望审查是否有一个业务的情况下采取这样的一个工具包对保持多个客户的特定版本。然而,对于编制语言,则可能仍需要建立某种形式的插件的框架所产生的形式码。

可配置的数据库储存

这是更为复杂。你可以这样做,在三个方面有其优点和缺点。

  1. 第一种方法是要有一系列的"用户"的字段表,例如'1','用户2'等等。配置领域的形式可以映这些领域和通用用户映场设施应该不会很难实现。这是最有效的是从一个数据库查询的观点,但受到限制的一个有限数目的可能领域。如果你有领域'1'到'User20你只可以支持20个用户定义的属性。此外,他们将有很好的、广泛varchars,所以你没有得到任何类型的安全,从数据库。

  2. 第二种方法是要有一个属性表挂断的实体。这不是给你的类型安全,但它不会让你有多特性,因为你想要的。建立一个通用的处理程序,这也是十分可行,但查询的性能将受到影响,因为你做的多加入反对的属性表。

  3. 保留定义的用户领域在XML blob。这有一点它推荐,因为它使得数据更难于获通过数据库。然而,我看到它这样做。

配置的业务逻辑

这是一个更加棘手的问题。不添加自定义的代码并改变你的生成,你有几种选择这样做可配置的业务规则:规则引擎、脚本语言或一套标准/关闭的特点,例如强制性的领域。

  1. 规则发动机:你真的要设计应用程序从头开始使用这些,他们有自己的局限性和弱点。伊,任职者在这一领域,也是相当昂贵。Java,JESS可能是一种选择。

  2. 嵌入式脚本语言:通过添加一个解释为Script,时尚或一些其他JVM友好解释的语言,你可以写插件对于系统没有发出新的建立。一些检测工作量仍然会发生,但这可能是一个维护赢得整体。

  3. /关闭的配置功能。这是最为灵活的备选办法,但是比较简单,并增加了相对较少外部依赖性和许可费用。它也可能是你唯一的选择如果你试图改造结构的东西开始生活作为一个定制的应用程序。

以上都不是

如果答案是以上都不是',你可能坚持定义的基础之上。在这种情况下,使一个插件架构的形式,所以你至少可以隔离的客户的具体项目进入一个独立的模块。

其他提示

有几个不同的方式去这一点。然而,它非常情景的依赖。

  1. 而不是增加不同客户的逻辑相同的画面,有不同的屏幕上每户有一个默认使用的每一个人。

  2. 定建立或客户分支机构。虽然这可以获得相当复杂。

  3. 做的就像你所做的和嵌入客户特殊逻辑的屏幕。

  4. 使用某种类型的规则发动机驱动,你的接口。

我能想到的4种方法:

  1. 不。是的,我知道这是现在太晚了,但如果你可以摆脱它,始终出售标准产品。

如果这是不可能的...

  1. 建立一个特征的矩阵,其中每个客户可以定义自己的要求通过勾箱(领域禁用的,本是强制性的,本可选等)。它限制如何可以本您的信息在UI-你倾向于一个简单的设计,但它是可伸缩性和灵活性。
  2. 有一个自定义页每个客户,其中每一页支持本身的业务逻辑和验证。也许你可以得到3或4个变体是提供给每一客户。
  3. 分支。如果你这样做,确保客户支付,因为它是个昂贵的皮塔。

我不确定什么类型的应用程序,这是的,但是当我们得到相互矛盾的功能要求,我们通常分离各个客户的版本,并且只包括有关代码,在各个分支。

你使用任何类型的代码控制/版本控制系统?SVN是什么我们使用,并且它可以让你更新的每个分支作为你做的改变主要代码,这样的代码是从来没有过期。

我会做一些类似形式的创造屏幕内的MS Access,请允许客户添加或删除/修改,并设置投入他们自己。它还将允许它们设定的哪些领域是强制性的和哪些不是。这将意味着更多的工作,在前端,但少在后面。

我建议使用某种形式的插件系统。对于每个客户,只要创建一个插件修改应用程序的用户界面,并把它装在启动时。我不是一个Java程序,所以恐怕我不能发布的任何特定的代码段,虽然。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top