2014年10月29日 星期三

不要連環呼叫的原因

之前看clean code有看到不要做
a.b.c.d這種呼叫
那時候也不知道為何
最近在改code的時候新增了一些property
例如本來是直接access
public A as cA 但因為需要從不同的角度觀察A,需要A1與A2兩種跟A相關的property
改成
public property A1 as cA
  set(value as cA)
    ... 
    m_A = setOp1(value)
  end set
  get
     return getOp1(m_A)
  end get
end ppoperty

public property A2 as cA
  set(value as cA)
    ... 
    m_A = setOp2(value)
  end set
  get
    return getOp2(m_A)
  end get
end property

private m_A as cA

但因為有程式直接修改了A的元素
.A.B = newB 變成
.A1.B = newB 這麼做並不會呼叫
  set(value as cA)
    ... 
    m_A = setOp1(value)
  end set
只會呼叫
  get
     return getOp1(m_A)
  end get
這時候get出來的objet跟m_A是脫離的,對他修改並不會影響m_A
應修改為
dim _A1 = .A1
_A1.B = newB
.A1 = _A1
如此才能正確設定 .A1的value

沒有留言:

張貼留言