2011-09-01 70 views
2

我想從Rails應用程序後端編碼的物流系統中提取業務邏輯,因爲它變得越來越複雜。我敢肯定,即使通過良好的OOP進行修飾,仍然有更好的選擇。從Rails應用程序中提取業務邏輯時,我有什麼選擇?

我想知道什麼可以怎麼做這樣的目的。一些研究讓我學習了Treetop或Rools解析器庫。這些是我期待做的選擇嗎?有沒有我在這裏失蹤的模式/概念,我可以學習自己編碼嗎?

我很想聽聽你的意見和建議。

非常感謝

PS:哦,是不是真的要用於商業邏輯,而不是僅僅把它硬編碼一種新的語言的勝利?因爲我可以從Treetop的例子中看到,就像在Ruby之上的DSL一樣。

+2

這不是一個「新」的語言都沒有。這是使用ruby的一個核心概念,您可以創建一個DSL來管理您正在嘗試解決的問題的語義和語法糖(有點)。 –

+0

好的,這是一個很好的觀點。但是就像你(和未來的維護者)必須學習它一樣。我只是想知道它是否增加了太多的「概念」開銷 – alvatar

+1

這是非常真實的。但是大多數ruby dsl的目標都是用於rspec的,就是讓它很容易理解。幾乎就像在這種情況下用純英文書寫說明一樣。如果它是神祕的,那麼爲什麼在任何情況下使用它都是有益的? –

回答

2

我會嘗試提取業務邏輯成寶石。其中大部分將只是複製/粘貼一些調整在這裏和那裏。

這種方法的最大好處是,你的寶石將只專注於自己的業務邏輯,所以它不會與代表等,只要您測試TDD的一切,你應該罰款處理。

最好的情況是隻需要你的寶石,然後調用它像最重要的方法:

require 'mygem' 
class SomeClass < ActiveRecord::Base 
    def important_method arg1, arg2 
    MyGem.compute_results arg1, arg2 
    end 
end 

這樣你的代碼保持清潔和模塊化,此外,你可以很容易地使用你的邏輯在不同的Rails應用程序。

這裏假設你的邏輯是一些鐵桿計算/ Ruby代碼。如果你的業務邏輯是一些sql語句,將它們留在你的應用程序中。

+0

在這種情況下,它混​​合了SQL和計算。我認爲提取寶石不是最好的選擇。我非常感謝你的回答!謝謝 – alvatar

+0

您可以嘗試僅提取計算,而不是創建一個創建插件的gem。插件並不像寶石那樣模塊化,但您通常可以輕鬆將它們移植到其他應用程序。 – ayckoster

+0

但是,爲什麼你想要導出邏輯?至少我如何看待它是程序中最具體的部分之一,所以我不打算再次使用確切的邏輯。我可以再次使用的是用於定義規則的語言,因此用它來製作寶石是有道理的。如果你知道你不會在其他地方再次使用它們,你爲什麼要出口這些規則? – alvatar

相關問題