I Computer a Life-long Learner

170714 Meetup 分享

2017-07-14

7 月的 789 三天去北京参加了助教的回训活动,收获很多。

  • 走马观花
  • 活动安排
  • 道与术
  • 金句

走马观花

活动安排

  • D1
    • Xdite 老师
      • Growth Hack
    • ihower 老师
  • D2
    • ihower 老师
    • Xdite 老师

Xdite 老师讲的偏向「道」的层面,常有「提壶灌顶」之效力。

真正的快速协作开发的流程?

CSS 档的切分

论如何切票

如何测试

  • 善良使用者测试
  • OnBoarding测试
  • 内部暴力测试

协作者的自我修养

  • 随时保持 release 状态
  • 随时可以让别人接手
  • 有清晰易懂好用的接口
  • 常作笔记

ihower 老师所讲偏向「术」的层面,给人「庖丁解牛」之感受。

如何快速搜索源码

答案是: clone + <CMD + Shift + F>

为什么要添加 index

O(N) vs O(log(N))

Database index

rails 中创建表时添加 index

  • 使用 add_index
    def change
    create_table :cities do |t|
      t.string :province
      t.string :city
    
      t.timestamps
    end
    
    add_index :cities, :juhe_id
    end
    
  • 使用 index
def change
  create_table :trains do |t|
    t.string :number, :index => true

    t.timestamps
  end
end

metaprogramming

  • Method Missing

define_method

有没有问过,为什么可以这样用:

find

find_by_id find_by_email find_by_name ....

method_missing

Model - the Law of Demeter

the Law of Demeter

先简单解释一下,这个 the Law of Demeter ()

有时用简单的比喻「别跟陌生人说话」,更贴切地说法是「别探朋友的隐私」,或「只同你最亲密的朋友交谈」。

或更粗暴的说法是「每行只用一个 dot」(这当然不是绝对的),但有借鉴意义。

像下面这种情况就要尽量避免:

在当前 model 中调用别的 model 的方法

  • Before
class Invoice < ActiveRecord::Base
     belongs_to :user
end

view

<%= @invoice.user.name %>
<%= @invoice.user.address %>
<%= @invoice.user.cellphone %>
  • After
class Invoice < ActiveRecord::Base
  belongs_to :user
  delegate :name, :address, :cellphone, :to => :user,
                                        :prefix => true,
                                        :allow_nil => true
end

view

<%= @invoice.user_name %>
<%= @invoice.user_address %>
<%= @invoice.user_cellphone %>

Factory Method

Factory Method

  • Before
class InvoiceController < ApplicationController
  def create
    @invoice = Invoice.new(params[:invoice])
    @invoice.address = current_user.address
    @invoice.phone = current_user.phone
    @invoice.vip = ( @invoice.amount > 1000 )

    if Time.now.day > 15
      @invoice.delivery_time = Time.now + 2.month
    else
      @invoice.delivery_time = Time.now + 1.month
    end

    @invoice.save
  end
end
  • After

Model

class Invoice < ActiveRecord::Base
  def self.new_by_user(params, user)
    invoice = self.new(params)
    invoice.address = user.address
    invoice.phone = user.phone
    invoice.vip = ( invoice.amount > 1000 )

    if Time.now.day > 15
      invoice.delivery_time = Time.now + 2.month
    else
      invoice.delivery_time = Time.now + 1.month
    end

    return invoice
  end
end

Controller

class InvoiceController < ApplicationController
  def create
    @invoice = Invoice.new_by_user(params[:invoice], current_user)
    @invoice.save
  end
end

金句

劣就是夯 (Worse is better.)

PHP / Javascript

注解之所在,重构之所在

代码面前,了无秘密

降维攻击的另一种直白的说法:到一大群傻叉当中

竞争是给弱者的(背后的意思是:成为强者,变成垄断者,就没有人与你竞争了)

the Law of Demeter

ruby programming

Growth Hack

Ohter Links


Comments(需要科学上网)