1
我相信以下所有內容都打破了MVC範式,但是想要仔細檢查是否屬於這種情況。在所有情況下,視圖直接訪問數據而不是傳遞數據。從我對MVC的理解來看,它絕不應該這樣做。控制器應該獲取呈現視圖所需的所有數據,以便不直接耦合視圖和模型。我的理解是否正確?通過視圖模型或視圖助手在視圖中訪問數據庫是否打破了MVC模式?
通過視圖助手
# in app/helpers/view_helper.hrb def some_view_helper(person_id) @person = Person.find(person_id) end
訪問數據庫通過視圖助手
# in app/helpers/view_helper.hrb def another_view_helper(person_id) # makes http request over the wire to get json back @json = WebService.get_person(person_id) end
訪問另一臺Web服務器通過視圖模型訪問數據庫
# in apps/controller/person_controller.rb def show @person = Person.find(params[:id]) @page_model = PageModel.new(@person) end #in app/views/persons/show.html.erb <% @page_model.friends.each do |friend| %> ... <% end %> #in app/models/person.rb class Person < ActiveRecord::Base has_many :friends end #in app/models/page_models/page_model.rb def initialize(person) @person = person end def friends @person.friends end
訪問Web服務器通過視圖模型
# in apps/controller/person_controller.rb def show @person = Person.find(params[:id]) @page_model = PageModel.new(@person) end #in app/views/persons/show.html.erb <% @page_model.friends.each do |friend| %> ... <% end %> #in app/models/page_models/page_model.rb def initialize(person) @person = person end def friends WebService.get_friends_for_person(person_id) end
謝謝你好,你的答覆。獲取數據的各種方式都超級簡化。我的問題不是哪一個更好,也不是如何讓我的代碼更好。我想知道是否所有4種情況都違反了MVC範例,因爲在每個實例中,視圖代碼都是訪問數據庫或獲取數據。謝謝! – user139078