所以我和我的一个同事一起研究框架式系统。我们当前的挑战是如何最好地实施状态。通常情况下,状态将带有唯一数据(表行的颜色,或要显示给用户的文本等)。目前,我们有一个包含所有这些数据的状态表。该表中包含一列:“css_class”,每当记录具有该状态时,指定的CSS类将附加到该元素(在本例中为tr)。此外,为了为另一个记录分配特定状态,在该数据库表中指定了外键(在这种情况下,用户具有特定状态。因此在users表中,有一个statuses_id外键)。这个实现工作正常,但有一些问题。首先,如果记录处于特定状态,我需要在PHP中执行特定操作,该怎么办?我们现在的做法是这样的:
if($user->status==0)
{
//execute some code
}
如果状态可以改变,这真的不行。更改一个状态,相关代码中断或行为与预期不同。
另一个问题,以及发布问题的主要原因是该表包含“css_class”列。这是非常通用的,允许我们非常快速地改变特定状态的风格。但我们真的不喜欢将代码放入数据库的想法。也许在数据库中使用CSS类不一定是坏事,但我真的不知道常见的做法是什么。有什么想法吗?
编辑:
我从前几个答案中收集到的是,为了维护MVC框架,我应该从模型中保留所有视图内容。我的论点是,如果我将css_class名称保留在数据库之外,那么我正在检查视图中的状态id,以便决定分配它的类。因此,如果我将该类放在数据库中,我将View信息放入模型中。如果我不在数据库中放入CSS类,那么我将模型信息放在View中(检查它属于哪个ID)。因此,如果不混淆模型,我会改变观点......
答案 0 :(得分:2)
到目前为止,我看到这个解决过的最优雅的方式(现在我已经使用了一些MVC实现)是只在数据库中存储相关数据。例如。您将在数据库中存储status =“red”,并将其保留在视图中,以便了解如何处理红色状态(就CSS而言)。然后通过设计一个足够高级的View层来解决问题,该层可以创建可重用的结构 - 这样,当css发生变化时,您不需要总是逐页更新内容。
将此信息传递给模型有点失败了内容/表示分离的点,因为现在您的代码需要知道从数据库中提取表示信息并将其转发到View级别,或者 shudder < / em>,你将在View层代码中从数据库中提取这些东西,这使得维护成为一场噩梦,因为你现在已经失去了对信息流的控制。
答案 1 :(得分:0)
如果要继续将其存储在数据库中的范例,可以创建另一个表,将状态的VARCHAR名称映射到相应的INTEGER ID。
但是,如果这是我的框架。我不会在数据库中存储这样的视图信息。这将由我MVC设置的V处理。
答案 2 :(得分:0)
从数据建模的角度来看: