Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture 用于将代码关联到db行的建议体系结构_Architecture - Fatal编程技术网

Architecture 用于将代码关联到db行的建议体系结构

Architecture 用于将代码关联到db行的建议体系结构,architecture,Architecture,我有一种情况,数据库中有很多行。例如,假设我们有一个名为ReportRenderType的表 行可能是: 线图 条形图 网格 等等 我可以使用数据库存储特定用户查看特定报告的方式。弗兰克喜欢以条形图显示的利润报告。如果我能将代码与数据库中的条目相关联,那就太好了。换句话说,如果LineGraphRenderer类知道它与ReportRenderType表中的第1行关联,那就太好了。这之所以有用的一个简单示例是,您可以填充ReportRenderType选项的下拉列表,然后选择一个值,并且管理器类

我有一种情况,数据库中有很多行。例如,假设我们有一个名为ReportRenderType的表

行可能是:

线图 条形图 网格 等等

我可以使用数据库存储特定用户查看特定报告的方式。弗兰克喜欢以条形图显示的利润报告。如果我能将代码与数据库中的条目相关联,那就太好了。换句话说,如果LineGraphRenderer类知道它与ReportRenderType表中的第1行关联,那就太好了。这之所以有用的一个简单示例是,您可以填充ReportRenderType选项的下拉列表,然后选择一个值,并且管理器类可以很容易地确定如何显示给定从dropdownlist中选择的值的报告。那么,问题是-如何在db和代码块之间建立关联

有很多选择:

A.创建LineGraphRenderer类时,可以使用属性ReportRenderType返回关联行的主键

B.您可以让LineGraphRenderer返回一个具有主键值的枚举。C允许您通过显式设置哈希代码值来执行此操作。这将提供静态类型,并为所有db条目提供一个位置

C.LineGraphRenderer上可以有一个ReportRenderType属性,该属性返回主键,但从设置文件中检索到关联行的值。这将有助于创建关联,特别是当其他人具有不同的主键值时。例如,公司A可能将线条图存储在第1行中,但公司B可能将线条图存储在第2行中


不幸的是,所有这些方法似乎都有缺点。我想知道其他人是如何解决这个问题的,他们是否找到了一些很好的方法来做我错过的事情

我也有类似的问题

您可以为Renderer类定义一个接口。然后实现一个基本渲染器线条图和所有其他渲染器类。您有一个具有GetRenderer的RendererFactory。然后给出工厂参数,工厂可以查看要使用哪个渲染器的DB。如果工厂未找到任何内容,请使用默认渲染器

也许这是一个想法。

我建议您不要将代码与数据库行关联!这与关注点的分离完全相反


老实说,这不是我听过的最愚蠢的想法;但是它非常接近。

我广泛使用选项B。这取决于两件事:

这些值不会经常更改,这需要进行代码编辑和重新构建 数据库已正确规范化,因此可以枚举主键(例如ReportRenderType),该主键在数据库中用作客户表中的外键。 这非常有效,因为您可以在数据库查询和更新中直接引用枚举值。如果您提前一点计划,还可以创建枚举类型名称,以便通过将文本按大写字母拆分来轻松地在UI中显示它们。”例如,“条形图”变为“条形图”


取决于您是否希望代码与数据库紧密耦合。就我个人而言,我对此感到满意,但其他人可能不满意。

。“愚蠢”这个词可能不合适,但它是一种反模式。我以前也有这样的想法。我小得多的时候,一直吃糖和咖啡因直到凌晨3点。然而,我从中成长起来,能够看到事物之间的界限。因此,如果你想表示一些东西,比如你应该如何显示图形,你需要在数据库中存储一些信息。在某个时候,您需要根据这些信息确定代码将要运行。什么是更好的方法?您需要在某个时刻将该行与代码关联,不是吗?是的,并且该位置位于表示代码中,而不是数据库中。数据库用于保存信息。让表示层决定如何显示它。特别是,我建议您在数据库中存储更多的抽象描述,并让代码对其进行解释。然后,您可以更轻松地更改它的显示方式。还要注意,T-SQL语言根本无法在数据库中存储行为。我甚至不确定完整和未实现的ansisql是否有办法做到这一点。这最多需要一个OODBMS。