这通常是情况,但这是最新的例子:
公司在制作招聘广告时会有各种联系方式(地址,电话号码,电子邮件......),他们有复选框,可以选择联系方式。它基本上是描述性数据。用户在阅读广告时会看到类似“您可以通过邮件,亲自申请......”,除之外的情况,如果是“通过网络门户”或“通过电子邮件”,因为这样会出现相应的按钮。这些选项存储在数据库中,客户端(网站的所有者,而非制作广告的公司)可以更改它们(例如,他们可以添加“通过心灵感应”或其他),但如果他们篡改“电子邮件”和“网络” - “选择”,他们搞砸了他们的网站。
那么我应该如何处理所有行为相同的数据,除了“这件事”以这种方式行事,而“那件事”以其他方式行事,而数据本身就是现场应由客户编辑。
答案 0 :(得分:1)
您已将自己的问题标记为“与语言无关”,并非所有语言都干净地支持多态,但这就是我接近这一点的方式。
每个选项都有一些类型,不同的类型需要设置不同的属性。但是,每种类型都支持某种“渲染”方法,可以根据需要显示联系方法。由于属性(电话号码或Web地址等)是特定于类型的,因此您可以在创建这些“对象”时验证管理员的输入,以确保提供必要的数据并使其有效。由于您实现了render方法,而不是吐出用户提供的HTML,因此可以确保呈现的页面是正确的。它不够灵活,但更安全,更友好。
在数据库中,您可以拥有一个稀疏填充的表,其中包含所有类型的联系人的数据,或者具有公共属性的“父”表和具有特定于类型的属性的子表。这取决于你有多少种类型以及它们有多么不同。在任何一种情况下,您都会有某种类型指示符,以便您知道应该绑定数据的对象类型。
答案 1 :(得分:1)
首先,你需要三思而后行。理由很简单。您应该满足特定需求,输入数据是提供该服务的一种手段。如果数据不符合现有服务,那么它的价值是什么?谁是该特定信息的消费者?
有两种可能的答案:您正在扩展您的客户群,或者您需要更改现有服务,因为需求会发生变化。在这两种情况下,您都需要从业务模型的开发中脱颖而出。如果您描述了您需要的服务以及它应该提供的信息,您将避免使用大量特定数据,并且具有易于在软件中实现的明确要求。
答案 2 :(得分:1)
基于提到的数据库,我建议使用resolution pattern。上面的链接描述了它,但它实际上比听起来简单得多。您编写了一个返回所有可能选项的数据库查询(例如,您可能使用UNION或JOIN一起读取标准选项和自定义选项,具体取决于您的模式) - COALESCE SQL关键字可用于查找第一个'分辨率'的选项值不是NULL。
答案 3 :(得分:0)
好吧,如果它只是你有两个特殊的选项,然后以相同的方式处理任何其他选项,那么将你的选项存储为字符串,如果两个特殊的选项中的任何一个出现在该列表中,然后显示该特殊项目的适当内容。
只需检查两个特殊项目的项目列表。没什么好看的。
答案 4 :(得分:0)
写一个非常简单的Rules Engine。您可以使用开箱即用的实现,也可以自己动手实施。由于你的案例看起来很简单,我倾向于自己动手,因为这意味着更少的依赖(YMMV)。