2015-06-09 49 views
1

我正在創建一個新的應用程序,允許用戶在本地應用程序數據庫中創建內容或直接在Facebook上創建內容。可以使用ActiveRecord子類來保存其他來源的數據,如Facebook嗎?

想象一下用戶有一個Post的CRUD界面。我創建了一個Post的模型,其子類ActiveRecord::Base。此類的對象具有將帖子保存到本地數據庫的方法。

但是,用戶也可以在我的應用程序中「打勾」並選擇「連接到Facebook」。當它被選中時,內容將不會被存儲在我的本地數據庫中,而是直接進入Facebook Graph API。

服務層和控制器層不知道數據的實際位置。至少這是我的想法。

我的問題是,如果我可以對本地數據和Facebook數據使用相同的Post類?當Post對象包含來自Facebook的數據時,Post類中的一些方法沒有意義;如save方法。

這樣的設計看起來很愚蠢嗎?我應該創建另一個Post類,它只是一個普通的Ruby類,沒有子類ActiveRecord::Base?或者還有其他更好的方法嗎?

+0

當你在沒有它的情況下使用Post和activerecord :: base或Post時,你一定會在Facebook上實現通常的記錄界面,對嗎? – limekin

回答

0

在設計課程時,應儘可能使其變得精益。查看它的好方法是計算包含在模型中的名詞和動詞。一個可以保存或刪除,但如果有涉及到的Facebook邏輯的保存和刪除起始這是一個好兆頭,這應該屬於一個不同的類完全。

與Facebook相關的另一個注意事項:新準則不允許爲用戶發佈「預寫」帖子。這意味着你無法以任何方式在Facebook上提示他發佈帖子給用戶牆。

我看不出有什麼問題Post < ActiveRecord::Base - 這是標準的Rails方式,它看起來好像應該實現將數據存儲到數據庫的標準方式,並從另一個角度查看Facebook發佈。

0

這種方法存在一些明確的問題 - 第一個問題是您最終會遇到Facebook API的緊密耦合。我已經從FB API的變化中產生了無數的悲痛,沒有任何警告或者沒有按照文件記錄工作。

另一個問題是性能 - 從FB讀取數據的速度通常比從線路上讀取數據庫的速度慢得多。它也容易暴怒(至少在我的經驗)。

我肯定會使用存儲在數據庫中的「代理對象」,並定期從Facebook中進行水合。

+0

謝謝,不知道它是否回答了我所有的問題。想象一下:但是如果你打算在一個顯示所有'頁面'對象的GUI中顯示一個列表。然後在我的應用程序中,數據將位於Page對象中。所以你說我不應該用Facebook數據填充頁面對象(它繼承自Active Record)。你有替代品嗎? – LuckyLuke

+0

我絕對依賴於應用程序 - 如果它是一個顯示Facebook頁面度量的應用程序,我肯定會直接使用來自Facebook的數據。如果您的情況類似於用戶選擇在Facebook上分享他們在您的應用中生成的任何內容,我將使用實際的數據庫來存儲對象,即使它們發佈到FB。當它們實際顯示時,我會用註釋等異步更新記錄。 – max

相關問題