我有一种情况,我在数据库中有一堆行。例如,假设我们有一个名为ReportRendererType的表。
行可能是:
等
我可以使用数据库来存储特定用户想要查看特定报告的方式。例如。 Frank喜欢将利润报告显示为条形图。如果我可以将代码与数据库中的条目相关联,那将是可爱的。换句话说,如果LineGraphRenderer类知道它与ReportRenderType表中的第1行相关联,那将会很棒。为什么这会有用的一个简单示例是,您可以填充ReportRenderType选项的下拉列表,然后选择一个值,Manager类可以轻松地找出如何在给定从下拉列表中选择的值的情况下显示报告。那么问题是 - 如何在db和代码块之间建立关联。
有很多选择:
一个。当你创建LineGraphRenderer类时,你可以有一个属性ReportRendererType,它返回了相关行的主键。
B中。您可以让LineGraphRenderer返回一个具有主键值的枚举(C#允许您通过显式设置哈希码值来执行此操作)这会给出静态类型,以及所有数据库条目的单个位置。
℃。您可以在LineGraphRenderer上具有ReportRendererType属性,该属性返回主键但从设置文件中检索关联行的值。这将有助于创建关联,特别是如果其他人具有不同的主键值。例如,公司A可能将LineGraph存储在第1行中,但公司B可能将LineGraph存储在第2行中。
不幸的是,所有这些方式似乎都有缺点。我想知道这个问题是如何被其他人解决的,如果他们找到了一些很好的方法来做我错过的事情。
答案 0 :(得分:1)
我建议你不将代码与数据库行关联起来!这与关注点分离完全相反。
说实话,这不是我听过的最愚蠢的想法;但它非常接近。
答案 1 :(得分:1)
我广泛使用选项B.这取决于两件事:
这非常有效,因为您可以直接在数据库查询和更新中引用枚举值。如果您提前计划一下,您还可以创建枚举类型名称,以便通过按大写字母拆分文本,可以在UI中轻松显示它们。例如,“BarGraph”变成了“条形图”。
取决于您是否希望您的代码与您的数据库紧密耦合。我个人对此很满意,但其他人可能不会。
答案 2 :(得分:0)
我遇到了类似的问题。
您可以为Renderer类定义一个接口。然后,您可以实现基本渲染器(可能是Line Graphe)和所有其他渲染器类。你有一个具有GetRenderer的RendererFactory。然后你给出工厂参数和工厂插图看看要使用的渲染器的数据库。如果工厂没有找到任何使用默认渲染器。
也许这样的事情是一个想法。