0

看來,寧靜的身份驗證和設計都使用在Ruby on Rails中,爲什麼不設計或Restful Authentication創建一個更好的封裝的名稱空間?

current_user 
user_signed_in? (or logged_in?) 
self.current_user = ... (for Restful Authentication) 

的「接口」到創業板上市。我不知道爲什麼沒有模塊或類是用來給它一個名稱空間,如:

Auth.current_user 
Auth.set_current_user 

Devise.current_user 

其實,我有點起初震驚地發現雷斯特夫爾認證「的組合「一切,文檔甚至沒有提及」接口「 - 在面向對象編程中,接口是最重要的東西之一,所有東西都是封裝的,接口是用戶需要關注的所有東西?有時,我沒有看到接口的任何文檔,例如Facebooker或Facebooker2,並且如果要求簡要描述API,則響應可以是「讀取代碼」。可以有5個寶石(1個寶石和4個寶石)以及至少40個文件,我的朋友。這是否完全違反了面向對象編程的創始原則?

回到最初的問題,不能Restful Authentication和Devise使用命名空間並更好地定義接口?如果混合使用所有名稱(包括實例變量名稱),是不是會污染Controller類? (很多工作都是在不同的控制器類中完成的,因此污染命名空間幾乎和污染全局命名空間一樣糟糕)。

回答

0

你是什麼意思建立的面向對象編程的原則?比如在你的項目中使用2個衝突的寶石?

回答你的問題 - 要求用戶輸入比必要的更多代碼沒有意義,這兩個寶石本質上是做同樣的事情,只是不同而已,所以真正的問題是 - 爲什麼你要使用它們呢?

紅寶石開放猴子補丁和在運行時更改類的一般想法是 - 開發人員不愚蠢,不會想做破壞他們項目的東西。

+0

我從來沒有說過我在同一個項目中使用他們。他們不能用於2個不同的項目嗎?你有沒有參與過2個不同的項目? – 2011-03-21 16:31:32

+0

好吧,如果你有他們在不同的項目,那麼你沒有什麼可擔心的 – keymone 2011-03-21 16:54:23

1

這是那些沒有正確答案的事情之一。當你在設計中混合使用時,它會爲actioncontroller添加約4種方法,這些方法被記錄下來,並且在使用任何庫之前應該閱讀文檔。基本上,這是寶石的「界面」。所有內容仍然封裝在模塊中,唯一的區別是ActiveRecord不會購買任何東西,Devise庫是進行集成的人員。此外,維護設計的人員需要編寫更少且更少的代碼來執行集成,並且您作爲用戶不需要編寫儘可能多的代碼來使用它。

現在,理論上這是一個ZOMG天空正在下降!類型的情況。事實上,只要它們正確完成(即將所有內容封裝在混音器中,重寫該方法,記得調用超級方法),則很難壓碎其他事物。即使遇到這些類型的問題(第一次後),通常很容易弄清楚發生了什麼。它基本上是一種不同的繼承形式,這是OOP的基本概念之一。

這樣做也可以讓圖書館添加功能到其他圖書館,甚至核心語言。這爲解決真正困難的情境問題提供了優雅的解決方案。這也意味着語言的狀態向前移動的速度要快得多,如果在使用之前必須等待任何新功能被推出,並且允許跨版本編碼通過polyfills非常優雅。我認爲這是在實現它的任何語言的最佳功能之一,並找到更多的限制語言的工作是因爲它的真正的痛苦,你覺得你有一個小警察的男子在你的肩膀告訴你,你不是活得智能足以使用強大的語言功能來解決您的問題。

現在,如果你說「OOP是一個爛攤子,我們不應該有討厭的類型通過繼承首先介紹了耦合」我完全同意你的看法。但是,這是一個不同的討論:)

+0

我還沒有看過Devise太多。但它確實使用'@ _current_user'。對於Restful Authentication,它使用'@ current_user',所以這也不是真的需要記錄,Restful Authentication的用戶不能擁有一個名爲'@ current_user'的實例變量嗎? – 2011-03-21 17:11:48

+0

...和文檔的所有其他實例變量名,類變量名,這樣就不會有衝突,並且將會在下一個版本出來和RESTful認證的實施需要一個額外的實例變量,通知走向世界,使其成爲真的很重要,對於只是將寶石更新到新版本的人而言,事情可能會微妙地破壞?也許這就是爲什麼需要自動化測試的原因,但這有點嚴重。 – 2011-03-21 17:16:03

+0

同樣,你所談論的問題是使用任何類型的繼承的全局問題。設計應該採取步驟來命名其他人不會使用的東西,或者檢查是否已經定義了事情,否則記錄警告,或者如果我們在談論方法,請確保保留繼承鏈。 Mixin更具成分性,然後設置父類,但在一天結束時它是繼承。只要你在談論繼承問題,你就在談論微妙的耦合和漣漪的副作用,開發者應該安全正確地使用該功能。 – 2011-03-21 17:25:09

相關問題