如何克服rails中明显的REST与DRY困境?

时间:2010-04-01 20:55:55

标签: ruby-on-rails database rest dry

一个rails app我正在研究二次方程的特征示例。显然,这些都是一个共同的结构:ax ^ 2 + bx + c = 0.

我不想存储这些的每个例子。我宁愿从模板中生成它们。存储数百个这种结构的可能版本似乎非常浪费和不干。

另一方面,如果我生成它们,如果它们只是多个数据库对象,我就无法再次可靠地访问它们。

我确信必须有办法克服这个问题,但我仍然在学习轨道,而我显然没有抓住这里的东西。感谢。

3 个答案:

答案 0 :(得分:1)

答案是“它取决于”。如果您只打算做二次方程的例子,那么您可以只存储a,b和c。如果你认为你要做其他类型的方程式,那就存储整个方程式。

真正不应该考虑的是,在浪费磁盘空间的意义上,存储完整等式是一种“浪费”。除非您存储数百万这些东西,否则不要担心。磁盘很便宜。

要采取的其他观点是YAGNI(雅不需要它),它会说你现在的情况编码,二次方程式,并且不用担心泛化它。如果需要,您可以稍后重构代码和数据。

另一种看待它的方式是KISS(Keep It Simple,Stupid)。最简单的事情可能就是存储完整的等式。这使得检索方程式是一个简单的数据库提取,没有代码可以生成方程式。

就个人而言,假设你没有做大量的这些事情,我会在这种情况下支持KISS。我不相信该系统只会用于二次方程。你可以做的是让系统处理任何方程,但使输入形式取a,b和c并将其转换为二次方程。如果以后需要其他方程类型,则更改输入逻辑比更改数据结构要简单得多。

答案 1 :(得分:1)

资源不必存储在数据库中,以便可以安全地访问。您只需要在资源的标识符和您生成的资源之间进行一对一的对应。

只需使用a,b,c作为ax^2 + bx + c = 0的标识符即可。然后,如果您的路线为resources :quadratics,则可以生成类似quadratic_url([a,b,c].join(','))的网址,并在QuadraticsController的show方法中,通过执行generate_quadratic(params[:id].split(',').map(&:to_i))生成。

答案 2 :(得分:0)

如果您的示例是任意且独立的,则必须存储系数a,b,c以定义二次方程式。

如果你想要唯一二次方程,你可以抛出一个方程的a,b和c与另一个方程的方程不同的常数倍。

你可以通过选择a,b和c来生成1,210个不同的二次方程式,它们是-5和+5之间的整数,包括 - 当然不能为零 - 但我不知道那是不是你的意思要什么?