你如何处理特殊情况

时间:2008-11-29 17:45:02

标签: language-agnostic

这通常是情况,但这是最新的例子:

公司在制作招聘广告时会有各种联系方式(地址,电话号码,电子邮件......),他们有复选框,可以选择联系方式。它基本上是描述性数据。用户在阅读广告时会看到类似“您可以通过邮件,亲自申请......”,之外的情况,如果是“通过网络门户”或“通过电子邮件”,因为这样会出现相应的按钮。这些选项存储在数据库中,客户端(网站的所有者,而非制作广告的公司)可以更改它们(例如,他们可以添加“通过心灵感应”或其他),但如果他们篡改“电子邮件”和“网络” - “选择”,他们搞砸了他们的网站。

那么我应该如何处理所有行为相同的数据,除了“这件事”以这种方式行事,而“那件事”以其他方式行事,而数据本身就是现场应由客户编辑。

5 个答案:

答案 0 :(得分:1)

您已将自己的问题标记为“与语言无关”,并非所有语言都干净地支持多态,但这就是我接近这一点的方式。

每个选项都有一些类型,不同的类型需要设置不同的属性。但是,每种类型都支持某种“渲染”方法,可以根据需要显示联系方法。由于属性(电话号码或Web地址等)是特定于类型的,因此您可以在创建这些“对象”时验证管理员的输入,以确保提供必要的数据并使其有效。由于您实现了render方法,而不是吐出用户提供的HTML,因此可以确保呈现的页面是正确的。它不够灵活,但更安全,更友好。

在数据库中,您可以拥有一个稀疏填充的表,其中包含所有类型的联系人的数据,或者具有公共属性的“父”表和具有特定于类型的属性的子表。这取决于你有多少种类型以及它们有多么不同。在任何一种情况下,您都会有某种类型指示符,以便您知道应该绑定数据的对象类型。

答案 1 :(得分:1)

首先,你需要三思而后行。理由很简单。您应该满足特定需求,输入数据是提供该服务的一种手段。如果数据不符合现有服务,那么它的价值是什么?谁是该特定信息的消费者?

有两种可能的答案:您正在扩展您的客户群,或者您需要更改现有服务,因为需求会发生变化。在这两种情况下,您都需要从业务模型的开发中脱颖而出。如果您描述了您需要的服务以及它应该提供的信息,您将避免使用大量特定数据,并且具有易于在软件中实现的明确要求。

答案 2 :(得分:1)

基于提到的数据库,我建议使用resolution pattern。上面的链接描述了它,但它实际上比听起来简单得多。您编写了一个返回所有可能选项的数据库查询(例如,您可能使用UNION或JOIN一起读取标准选项和自定义选项,具体取决于您的模式) - COALESCE SQL关键字可用于查找第一个'分辨率'的选项值不是NULL。

答案 3 :(得分:0)

好吧,如果它只是你有两个特殊的选项,然后以相同的方式处理任何其他选项,那么将你的选项存储为字符串,如果两个特殊的选项中的任何一个出现在该列表中,然后显示该特殊项目的适当内容。

只需检查两个特殊项目的项目列表。没什么好看的。

答案 4 :(得分:0)

写一个非常简单的Rules Engine。您可以使用开箱即用的实现,也可以自己动手实施。由于你的案例看起来很简单,我倾向于自己动手,因为这意味着更少的依赖(YMMV)。