2013-03-05 58 views
1

我來自Java世界,其中基於無狀態服務的系統非常流行。 在Ruby世界中,它不是那麼受歡迎,我找不到任何答案,如何做到這一點。Ruby應用程序中的無狀態服務和每次創建新實例

說我需要CRUD服務來存儲訂單。它是純粹的無狀態的,沒有實例變量,只是像create,read等方法。我想知道每次我想使用它時是否應該創建它的新實例?在Spring或Guice的java中,您可以同時使用一個實例。

我能想到的下列方式每次

class OrderRepository 
    def create(order) 
     .. 
    end 
    end 
以實施

1)普通班,並呼籲OrderRepository.new

2)類方法和調用OrderRepository.create(不好聽)

class OrderRepository 
    def self.create(order) 
     .. 
    end 
    end 

3)模塊,而不是類

在這種情況下哪一個更可取?

回答

-1

在java土地中有很多模式不會映射到像Ruby這樣的動態語言。儘管有一本關於紅寶石設計模式的書(http://www.amazon.com/Design-Patterns-Ruby-Russ-Olsen/dp/0321490452),但其中大部分都是無用的。

當您談論CRUD時,您可能正在談論一個HTTP講話API,您可以使用它來管理某些數據庫實體。

在ruby land中,您可能使用rails來完成這些工作,因爲它對構建RESTfull應用程序和JSON apis有很大的支持。

所以請,請不要在ruby中創建DAO或Repository類。那就沒有必要(大部分時間)。

+0

好吧,讓我們暫且留下簡單的CRUD,假設我需要定期從MongoDB中獲取一些'Document'對象,並將它們放入隊列以讓其他系統逐一處理它們。在Java中,我會創建'Scheduler'來定期運行,它會使用'DocumentsRepository'從MongoDB和'DocumentsToQueueSender'中獲取數據,以便將獲取的文檔放入隊列中。這些都是無國籍的服務。你會如何在Ruby中實現上面的東西? – grafthez 2013-03-05 20:30:31

+0

在紅寶石般的土地上,你可能會使用Rails,但是Rails非常重量級,並不是每個人都喜歡它的功能 - 有些人可能不想成爲下一個Rails啓示錄的一部分(http://labs.headshift.com/2012/03/07 /上軌質量,分配,GitHub的和最現代啓示錄/)。建立自己的DAL沒什麼問題,我曾經參加過這樣的團隊 - 這很複雜,但我們確實得到了我們想要的,而我們卻沒有做到。 – philosodad 2013-03-05 20:46:06

+0

如果您更改與剛剛給出的示例有關的問題,這將對您有所幫助,以便人們可以真正幫助您。從你寫的東西我不認爲我可以幫你。 – phoet 2013-03-06 10:00:05

1

在你的情況,我會使用類級別的方法。意見可能會有所不同,但如果您實際上不需要實例化某個實例,則看不出任何意義。如果你不需要單獨的東西或者添加一個框架,或者如果一個框架不適合你的目標,我也看不出有什麼意義。

相關問題