Presenter pattern 的原理是,是 Model-View-Controller(MVC) 架构模式衍生出来的一个部分,主要用於建立使用者的介面接口。 在 MVP 中,Presenter 承担了 中间人
的功能。在 MVP 中,所有逻辑的部份都会写在 Presenter 内。事实上,其实与 Decorator 有点相似,通常有些些微的差异,但通常只会选择两个其中一个来整理,也没有一定的通则,主要还是以团队内的方式为主。
直接来看如何使用:
假设我有一张 Log 的表,里面 operator 栏位纪录了 User 谁操作了某项东西,所以纪录这个 Log,并且知道
Source
->Target
从 A 到 B,这时候想要後台的前端可以看到 Log 纪录,随便举个例子。
app/presenters
folderPresenter
to Controller假设 Log 是在 TrackController 内的 show 来显示,范例如下:
# frozen_string_literal: true
class TrackingController < ApplicationController
def show
@user_logs = UserLogPresenter.new(user_id)
end
# ...
end
app > presenters > user_log_presenter.rb
Enumerable
include 近来提供 each 等等方法,
# frozen_string_literal: true
class UserLogPresenter
include Enumerable
def initialize(user_id)
@user_id = user_id
end
def each(&_block)
logs.each do |log|
yield format(log)
end
end
def format(log)
{
user: User.find(log.operator),
source: log.source,
target: log.target,
created_at: log.created_at
}
end
def logs
@logs ||= Log.where(operator: user_id)
end
end
@user_logs.each do |log|
<th><%= log[:user] %></th>
<th><%= log[:source] %></th>
<th><%= log[:target] %></th>
<th><%= log[:created_at] %></th>
end
注: 想理解两者的差异也可以参考这篇的比较 Ruby on Rails patterns - decorator vs presenter,虽然目前我也没有可以完全的分懂 orz
将资料上传至Firebase上 使用UIImagePikerController来选取照片上传 使用...
前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...
在上一篇中介绍了如何透过 router 传递参数,也介绍了怎麽建立嵌套的 route 等等,在本篇中...
哈罗 ~ 大家好 ~ 欢迎回来 ~ 昨天提到 Power Automate 的自动化流程以及核准流程...
1.前言 这边主要是为解说前几篇关於AHT10的程序码,此次主要讲的部分是loop中的程序码,因为透...