2010-04-01 31 views
1

我正在開發一個Rails應用程序,其中包含二次方程的示例。顯然,這些都是一個共同的結構:ax^2 + bx + c = 0。如何克服rails中明顯的REST vs. DRY困境?

我不想存儲這些的每個例子。我寧願從模板生成它們。存儲數百個這種結構的可能版本似乎非常浪費和不幹。另一方面,如果我生成它們,如果它們只是多個數據庫對象,我就不能可靠地再次訪問它們。

我相信肯定有辦法解決這個問題,但我仍然在學習rails,而且我顯然沒有在這裏抓東西。謝謝。

回答

1

答案是「視情況而定」。如果你只是要做二次方程的例子,那麼你可以存儲a,b和c。如果你認爲你會去做其他類型的方程,那就把整個東西儲存起來。

真正不應該考慮的是它是一種「浪費」來存儲完整的等式,因爲您正在浪費磁盤空間。除非你儲存了數以百萬計的這些東西,否則不要擔心。磁盤很便宜。

要採取的其他觀點是YAGNI(雅不會需要它),它會說現在的情況代碼,二次方程,並且不用擔心泛化。如果您需要,可以稍後重構代碼和數據。另一種看待它的方法是KISS(保持簡單,愚蠢)。最簡單的事情可能就是存儲完整的等式。這使得檢索等式成爲簡單的數據庫提取,不需要用於生成等式的代碼。

就個人而言,假設你沒有做這麼多的事情,我會在這種情況下支持KISS。我不確定該系統是否只能用於二次方程。你可以做的是讓系統處理任何方程,但使輸入形式取a,b和c並將其轉化爲二次方程。如果您以後需要其他方程式,更改輸入邏輯比改變數據結構要簡單得多。

+0

肯定會有其他類型的方程,一些結構上可組合/可生成的像quadratics,其他不是。'浪費'我的意思不是磁盤空間,而是重複自己,所以例如,如果我想改變每個二次示例的措辭,我將不得不在數百個地方改變它。我猜測我可以通過遷移或其他大規模數據庫操作來做到這一點,但我想知道存儲這麼多或多或少相同的東西是不好的做法。特別是因爲我會和其他類型的方程式一樣,它們或多或少都是相同的。 – Chris 2010-04-02 08:15:46

+0

多讀一些,我想知道是否播種db是去這裏的路。據推測,我可以根據可能的模式進行播種,如果需要,我可以通過重播進行改變? – Chris 2010-04-02 08:58:37

+0

@Chris您的第一條評論意味着您所談論的不僅僅是存儲公式,還包括周圍的示例文本?它的一切都一樣嗎?在這種情況下,我會寫一個二次方案的模板,它將鍵/值對作爲參數,因此您可以將它提供給a = 2 b = 4 c = 7以及您以後需要的任何其他變量。其他類型可以使用其他模板。然後你可以改變模板。這基本上是你產生方程式的原始想法,但當它不僅僅是一個方程式時它更有意義。 – Schwern 2010-04-03 20:39:56

0

如果你的例子是任意的和獨立的,你必須存儲係數a,b,c來定義你的二次方程。

如果你想要獨特的二次方程,你可以拋出一個方程的a,b和c與另一個方程的a,b和c不同的方程。

您可以通過選擇a,b和c爲-5到+5之間的整數來生成1,210個不同的二次方程 - 當然不能爲零 - 但我不知道這是否是你要?

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))來生成。