Permalink
Browse files

完成 controller bad smell

  • Loading branch information...
xdite committed Aug 23, 2011
1 parent 170945b commit 17d4710dfa359abcc3fd482e833a52dd1d768876
View
@@ -1,2 +1,3 @@
.redcar/
-tmp/
+tmp/
+.sass-cache/
View
@@ -31,13 +31,80 @@
!SLIDE code
# LOGIC IN VIEW
+### 錯誤
+<div class="wrong">
+ <pre>
+ &lt;% if current_user &amp;&amp; current_user == post.user %&gt;
+ &lt;%= link_to(&quot;Edit&quot;, edit_post_path(post))%&gt;
+ &lt;% end %&gt;
+ </pre>
+</div>
+
+### 正確
+
+<div class="correct">
+ <pre>
+ &lt;% if editable?(post) %&gt;
+ &lt;%= link_to(&quot;Edit&quot;, edit_post_path(post))%&gt;
+ &lt;% end %&gt;
+ </pre>
+</div>
+
+
!SLIDE
-# 在 Controller 裡處理資料
+## 在 Controller 裡處理資料
+
+### 錯誤
+
+<div class="wrong">
+ <pre>
+ def checkout
+ book = Book.find(params[:id])
+ current_user.balance -= book.price
+ curremt_user.save!
+ redirect_to account_path
+ end
+ </pre>
+</div>
+
+### 正確
+
+<div class="correct">
+ <pre>
+ def checkout
+ book = Book.find(params[:id])
+ current_user.purchase(book)
+ redirect_to account_path
+ end
+ </pre>
+</div>
!SLIDE
-# 在 Model 裡寫 view code
+## 在 Model 裡寫 view code
+
+### 錯誤
+
+<span class="filename"> app/models/post.rb</span>
+
+<div class="wrong smaller">
+ <pre>
+ def tag_list_for_welcome_page
+ tags.maps {|tag| "&lt;span&gt; tag.name &lt;/span&gt;" }.join(" / ")
+ end
+ </pre>
+</div>
+
+### 正確
+<span class="filename"> app/helpers/post_helper.rb</span>
+<div class="correct smaller">
+ <pre>
+ def tag_list(tags)
+ tags.map { |tag| content_tag(:span, tag.name ) }.join(" / ")
+ end
+ </pre>
+</div>
!SLIDE
View
@@ -1,8 +1,8 @@
!SLIDE
-# 讓我們來幾招吧
+## 讓我們來學幾招整理術吧
-!SLIDE bullets incremental left
+!SLIDE bullets left
# Agenda
@@ -11,4 +11,4 @@
* Model
* Routing
* Advanced: Meta Programming
-* Advanced: MiddleWare
+* Advanced: MiddleWare
View
@@ -1,42 +1,75 @@
!SLIDE
# View
-
## 超過 2.5 頁請注意
-!SLIDE bullets incremental left
-
-* 重複的 html 使用 partial 整理
-
!SLIDE
-# TODO : EXAMPLE
-
+## 常用的 html 使用 partial 整理
+
+<div class="correct smallest">
+ <pre>
+ &lt;div id=&quot;header&quot;&gt;
+
+ &lt;div class=&quot;group&quot;&gt;
+
+ &lt;%= render :partial =&gt; &quot;common/user_navigation&quot; %&gt;
+
+ &lt;%= render :partial =&gt; &quot;common/header&quot; %&gt;
+
+ &lt;/div&gt;
+
+ &lt;%= render :partial =&gt; &quot;common/network&quot; %&gt;
+
+ &lt;%= render :partial =&gt; &quot;common/man_navigation&quot; %&gt;
+
+ &lt;aside&gt;&lt;%= ads_in_layout_top %&gt;&lt;/aside&gt;
+
+ &lt;/div&gt;
+</pre>
+</div>
+
+### (全站 HEADER)
+
+!SLIDE code
+
+## 重複用到的 html 使用 partial 整理
+
+<div class="correct smallest">
+ <pre>
+ &lt;article class=&quot;articles&quot;&gt;
+
+ &lt;%= render :partial =&gt; &quot;posts/s_post&quot;,
+ :collection =&gt; @new_posts, :as =&gt; :post %&gt;
+
+ &lt;%= render :partial =&gt; &quot;posts/apost&quot;,
+ :collection =&gt; @advertise_posts :as =&gt; :post %&gt;
+
+ &lt;/article&gt;
+ </pre>
+</div>
+
+### (文章列表)
!SLIDE
# View
## 同樣用途的 helper 出現第三次請注意
-!SLIDE
+!SLIDE code
-# TODO : EXAMPLE
-
-!SLIDE
-
-# View
+## BAD SMELL
+<div class="wrong smaller">
+ <pre>
+ &lt;span&gt;&#x767c;&#x8868;&#x65bc; &lt;%= l(@post.published_at, :format => :long) %&gt;&lt;/span&gt;
+ </pre>
+</div>
-## 重複貼上 CSS class 請注意
-
-!SLIDE
-
-# TODO : EXAMPLE
-
-!SLIDE
-
-# 使用 SCSS 整理 CSS CODE
-
-!SLIDE
+## GOOD SMELL
-# TODO : EXAMPLE
+<div class="correct smaller">
+ <pre>
+ &lt;span&gt;&#x767c;&#x8868;&#x65bc; &lt;%= render_published_at(@post) %&gt;&lt;/span&gt;
+ </pre>
+</div>
View
@@ -1,30 +1,107 @@
!SLIDE
-# 類似的 code 在同一個 controller 出現第三次請注意
+### 類似的 code 在同一個 controller 出現第3次請注意
+
+!SLIDE code
## 使用 before_filter 整理
-# TODO : EXAMPLE
+<div class="correct smaller">
+ <pre>
+ class PostController &lt; ApplicationController
+ before_filter :find_category
+
+ def show
+ # xxxx
+ end
+
+ def edit
+ # xxxx
+ end
+
+ protected
+
+ def find_category
+ @category = Category.find(params[:category_id])
+ end
+ end
+ </pre>
+</div>
+
+!SLIDE
-# 類似的 method 在不同 controller 出現第二次出現請注意
+### 類似的 method 在不同 controller 出現第二次出現請注意
+
+!SLIDE
## 搬到 application controller
+<div class="correct smaller">
+ <pre>
+ class ApplicationController < ActionController::Base
+ def find_user
+ @user = current_user
+ end
+ end
+
+ class UserFavoritesController &lt; ApplicationController
+ before_filter :find_user
+ end
+
+ class UserProfileController &lt; ApplicationController
+ before_filter :find_user
+ end
+ </pre>
+</div>
+
!SLIDE
-# 類似形式的 controller 出現第二次請注意
+### 類似形式的 controller 出現第二次請注意
+
+!SLIDE
## 使用 NameSpace 整理 controller
+### BAD SMELL
+
+<span class="filename">app/controller/user_favorites_controller.rb</span>
+<div class="wrong smaller">
+ <pre>
+ class UserFavoritesController &lt; ApplicationController
+
+ class UserProfileController &lt; ApplicationController
+
+ </pre>
+</div>
+
+### GOOD SMELL
+<span class="filename">app/controller/user/favorites_controller.rb</span>
+<div class="correct smaller">
+ <pre>
+ class User::FavoritesController &lt; ApplicationController
+
+ class User::ProfileController &lt; ApplicationController
+
+ </pre>
+</div>
+
!SLIDE
-# 單一 method 超過 15 行請注意
+## 單一 method 超過 15 行請注意
+
+!SLIDE bullets left
+
+## Refactor
-## refactor 到 model
-## refactor 到 presentor
+* refactor 到 model
+ - 「業務邏輯相關的資料」
+ - 「對資料的處理方法」
+* refactor 到 presentor
+ - 不是什麼都需要扔 model
+ - Model - View - Presenter
!SLIDE
-# 資料處理動作請注意
+# MVP
-## refactor 到 model
+## TODO : Explain
View
@@ -64,13 +64,25 @@ body, #preso, .slide {
color: red;
}
-/* line 43, ../sass/rubyconftw.scss */
+/* line 41, ../sass/rubyconftw.scss */
+span.filename {
+ font-size: 1.1em;
+ padding: 10px 0px 20px 40px;
+ display: block;
+}
+
+/* line 48, ../sass/rubyconftw.scss */
.code pre {
font-size: 2em;
line-height: 1.5em;
}
-/* line 49, ../sass/rubyconftw.scss */
+/* line 54, ../sass/rubyconftw.scss */
+.smallest {
+ font-size: 60%;
+}
+
+/* line 58, ../sass/rubyconftw.scss */
div.image {
text-align: center;
}
View
No changes.
View
@@ -38,17 +38,23 @@ body, #preso, .slide {
color: red;
}
-.code{
+span.filename{
+ font-size: 1.1em;
+ padding: 10px 0px 20px 40px ;
+ display: block;
+}
+.code{
pre{
font-size: 2em;
line-height: 1.5em;
}
}
+.smallest{
+ font-size: 60%;
+}
+
div.image{
text-align:center;
}
-
-
-
Oops, something went wrong.

0 comments on commit 17d4710

Please sign in to comment.