2015年9月25日 星期五

封裝與迪米特法則

 
每週二∼六出刊.2015.09.26
 
本 期 目 錄 簡介/舊報明細
封裝與迪米特法則
京站靠一套POS管400品牌,每日十萬人潮銷售情報一手掌 ...
CIO得懂的科技業談判三策略

優惠訊息

. 防禦全面提升研討會報名中
. 租虛擬主機架站,再附信箱
. 行銷!就用中文網址輔助

專欄 

封裝與迪米特法則

一切都是有關於封裝

林信良
因在網路上經營「良葛格學習筆記」(openhome.cc)而聞名,曾任昇陽教育訓練中心技術顧問、甲骨文教育訓練中心授權講師,目前為自由工作者,專長為技術寫作、翻譯與教育訓練。喜好研究程式語言、框架、社群,從中學習設計、典範及文化。閒暇之餘記錄所學,技術文件涵蓋C/C++、Java、Ruby/Rails、Python、JavaScript、Haskell等多個領域。


談及程式中相依性的去除時,迪米特法則(Law of Demeter)經常被提出,此法則經常被簡單描述為「對任何函式傳回的物件,不該再呼叫上頭之方法」,因此程式碼中出現訊息鏈(Message Chain)或方法鏈(Method Chain)時,就有可能是違反迪米特法則的訊號,實際上真的是如此嗎?

迪米特法則

迪米特法則最初,是美國東北大學在1987年由Ian Holland發想,在美國東北大學官網的〈Law of Demeter: Principle of Least Knowledge〉(http://goo.gl/sKqNTn)中記載著,此法則應用在他們的The Demeter Project,迪米特法則又常稱為最少知識原則(Principle of least knowledge),也就是「各單元對其他單元所知應當有限:只瞭解與目前單元最相關之單元」。

迪米特法則具體來說,在一個類別的方法m中,可以再呼叫的方法應只能來自:類別本身、傳給m的引數、m中建立之物件、C實例擁有之物件。使用程式碼來表示的話就是:
private A a;
private void f() {...}
public void m(B b) { // 方法中只能呼叫
f(); // 類別定義的方法
b.action(); // 引數的方法
new D().run(); // 自建物件之方法
a.execute(); // 實例擁有物件之方法
}

在《Clean Code》中,曾節錄了來自Apache專案中的一段程式碼ctxt.getOptions().getScratchDir().getAbsolutePath(),稱其「可能」違反迪米特法則,這種從一個物件呼叫一堆取值函式的臭味,在《重構:改善既有程式的設計》書中,稱這類情況為依戀情節(Feature Envy),也就是函式對某類別的興趣,高過對自身所處Host類別的興趣。

送報生與錢包的故事

《Clean Code》對於來自Apache專案的程式碼,是否違反迪米特法則做了討論,火車廂式的方法鏈結風格並不是判斷的重點,因此,即便使用暫存變數ctxt、opts、scratchDir將程式碼修改為ctxt.getOptions()、opts.getScratchDir()、scratchDir.getAbsolutePath(),依舊「可能」違反了迪米特法則,書中指出是否違反法則,主要取決於ctxt、opts、scratchDir為物件或者資料結構,類似地,就算不是方法呼叫,ctxt.options.scratchDir.absolutePath這樣的風格,也是有可能違反迪米特法則。

美國東北大學網站上,提供了一份〈The Paperboy, The Wallet, and The Law Of Demeter〉文件,其中以送報生如何取得客戶付款為例,清楚地表達了違反迪米特法則的情況。以下的程式碼,是位於Paperboy類別之中:
Wallet theWallet = myCustomer.getWallet();
if (theWallet.getTotalMoney() > payment) {
theWallet.subtractMoney(payment);
}

這邊沒有方法鏈串,然而,一個送報生真的可以直接取得客戶的錢包,然後看看�媕Y有多少錢,接著從錢包中拿出錢嗎?

在正常的生活經驗中,其實並不會發生這種事,Customer類別中,應該有個如下的getPayment(float bill)方法內容,而Paperboy能做的事,應該只是myCustomer.getPayment(payment):
if (myWallet.getTotalMoney() > bill) {
theWallet.subtractMoney(payment);
return payment;
}

 閱讀全文
 
 
京站靠一套POS管400品牌,每日十萬人潮銷售情報一手掌握

要因應單日10萬人潮湧入,京站靠一套POS系統串接400個品牌,每個專櫃的銷售資料、財務資料、顧客資料都一手掌握

京站實業管理處副總經理 王大政


還記得當年風靡一時,突破傳統百貨公司經營模式,成功打造臺灣首座女性專屬百貨公司的衣蝶嗎?在母公司力霸集團風波後,受到牽連的衣蝶由新光三越接手,不過當時那個創新力十足的衣蝶團隊並沒有就此完全解散,而是輾轉來到日勝生集團,在臺北火車站後站,再度打造了一個新百貨品牌,也就是現在的京站時尚廣場。

負責督導、管理京站IT部門的京站實業管理處副總經理王大政,正是當時管衣蝶IT部門的人,他跟著原本的衣蝶團隊一起接下京站開店任務,團隊中包含了招商和籌備,而王大政的任務則是要建置整個京站的IT架構。

王大政表示,京站從2007年左右開始籌備,初期花了1年半的時間規畫整個IT系統架構,包括導入關鍵的POS系統,再用POS系統串接其他系統,如CRM會員管理系統,以及整個骨幹網路架構的建置,一直到2009年6月左右才完成。

京站的營業面積2萬多坪,結合臺北轉運站、君品酒店、威秀影城以及伊士邦健身房,組成大型的複合式百貨商城,不含地下停車場及電影院就有7層樓,超過400個品牌進駐,要因應單日10萬人的人潮湧入,平均每天破千萬的營收規模,京站靠一套POS系統串接所有專櫃資訊,從銷售資訊、財務資料到顧客資料都一手掌握。

雖然京站看起來像購物商場,但是有別於一般商場讓進駐的店家使用自己的POS系統,京站採用同一套集中管理的POS系統,高度掌握每個櫃位的銷售情形。王大政表示,對百貨公司來說,最重要的就是POS系統。

而POS系統建置規模與百貨商場發展趨勢有關,他解釋,早期百貨公司收錢方式採統收機制,消費者到百貨公司專櫃買東西時,專櫃店員要到公共收銀臺才能完成交易,因此,當時每個樓層只需要建幾臺公共收銀臺,但之後百貨公司漸漸改成自收機制,在每個專櫃都設置一臺POS機,讓各專櫃可以自行結帳。

儘管傳統的統收模式越來越少見,不過公共收銀臺仍維持一定功用,並沒有被完全取代,王大政表示,有些百貨公司的專櫃並非長期設櫃,而是因應特定時段,像是促銷、節慶、換季等活動,或是有些公司規模較小,沒有自己的收銀系統,因此,像京站目前每個樓面都還有公共收銀臺,而遇上周年慶有特殊需求時,也會增設臨時性的收銀機臺。

善用資料分析找出百貨業經營眉角

除了POS系統之外,包括京站的會員卡和CRM系統都是在開幕前就已經到位。王大政表示,百貨業的資料量很多,光是一筆交易資料就可以告訴管理者很多事情,但前提是,管理者要知道可以從這些資料中取得哪些資訊,透過軟體或技術協助,從BI系統中找答案,把資料變成有用的資訊。

他說,從商品本身,可以得知品牌、價格及市場銷售資訊,從消費者來看,可以將會員系統中的會員資料匯進資料庫,蒐集消費者的性別、年齡、收入和學歷等資訊。將各系統串接後,除了能追蹤品牌業績狀況、銷售分析,也能和顧客管理系統整合,分析顧客的消費趨勢。

京站目前使用的POS系統中,就有一套簡單的BI分析工具,不過,王大政認為,目前能做到的資料分析程度還不夠細緻,因此,他們和SAS合作,計畫要再導入一套新的BI系統。他表示,新BI系統在資料的分析細緻程度更高,做營業分析時,可以拆到更細部的資料層級,讓管理者從資料庫中找出更多百貨業經營的眉角。

雖然京站擁有所有專櫃的銷售資料,王大政表示,但是無法取得最細項的產品類別,也就是所謂的單品管理,這不只是京站和進駐品牌之間會遇到的問題,同時也是很多百貨公司都遇到的問題,由於每個品牌公司的軟體不一定相容,在串接上會遇到要誰串誰的問題,理論上來說,應該是京站提供一個介面讓大家來串接,但是這對於在眾多百貨公司設櫃的廠商來說是個大難題。

王大政認為,百貨業是由人所組成,不能純靠資料庫的資料,來做所有的分析跟決策,這些資訊都只是重要的參考指標而已。他舉例,透過BI系統,也許能分析哪個專櫃或位置受歡迎,但是王大政認為,造成業績好壞的變數太多,還要考慮品牌、價格、促銷活動等,在兩櫃位的所有條件都相等之下,轉角櫃位才有絕對優勢。除此之外,京站也會分析人潮流量,每個時段的營業額也都知道,透過相互比較,知道是不是有達到符合預期的業績。

王大政說,京站在去年10月導入一套精確的人潮計數系統,在所有出入口設置閘口,將影像感應器放在天花板上,透過影像辨別人形,計算出每個時段、每個閘道的人流量,再把數據跟營業數據交叉比對分析,找出什麼時間人最多,銷售上有哪些優勢等,他也說,根據他們測試,這套系統的準確度98%。

京站目前有三套主機,兩套都是線上伺服器,商場的資料經過VPN傳送到主機,一套放在京站,另一套放在臺北轉運站作為線上備援主機,而第三套則作為離線備援。他說,商場數據資料的重要性高,無法受到停電或是網路的影響,當第一套主機出問題時,第二套主機必須要能夠馬上接手,並將資料做定時的備援。

技術快速演變,早期建置的IT架構要能快速跟上

京站因為營業上的需求,在開店初期就意識到POS系統的關鍵,然而,很早就e化的考驗,在於新網路技術的更新與演進,有技術和IT架構要怎麼跟上,像無線網路的普及率的問題。

王大政表示,由於整個IT架構9年前就建置,跟現在比起來,當時網路技術不管是技術面還是運用面,成熟度大概都還在幼稚園階段,那時大家對網路的信賴度沒有那麼高,也不知道網路發展這麼快速,因此京站在建置時只以內部處理的網路需求為主,外部的網路及跟賣場的串接都還用實體線路。

京站的骨幹網路都採用實體光纖,內部POS系統原本都接實體線,新增設或是原本沒預留線路的櫃位,才用Wi-Fi網路來連線,因此分為網路實體線路和Wi-Fi兩種。先從各樓層拉線,再從主要通道深入各櫃,都是接實體線路,各專櫃的POS系統資料經過後臺傳到大主機,而主機備援也是實體線路。他認為實體線的保障較高,也不會有佔用頻寬的問題。

他表示,由於當時網路的普及和覆蓋率做的不夠全面,也沒有預留線路,公共區域的網路沒問題,但專櫃內的網路建置就會遇到問題,需要花費更高的成本才能完成。不過,他也說,網路技術、通訊協定不斷進步,即使當時真的預留了線路,現在也不一定能用。

大學念大眾傳播系的王大政非IT出生,最早先進到國泰信託,從事內部刊物的編輯採訪工作,王大政笑著說,想東西、寫東西是興趣之一,但後來工作之後發現和想像有落差,正好遇上民國74年的十信案,轉而跳到力霸百貨集團下從事行銷工作,沒想到在百貨業一待就是30年。

他在行銷部門做了8年,之後先轉到營業單位,再被調到開店籌備部門,參與整個開店籌備流程,把當時的力霸轉型成衣蝶百貨,後來力霸集團在士林夜市基河路開臺北海洋館,王大政也參與了籌備過程,當了兩年館長後,才因公司職務調整,回到衣蝶接管IT部門。

而他現在負責的京站管理處,底下涵括了資訊部、工程部、商場開發部、總務部等部門。他說,由於IT人力有限,很多系統或是更新部分皆委外處理,而他的任務是要把IT架構做出來,然後扮演督導與管理的角色,至於技術細節,他認為最重要的是要能夠滿足使用單位的需求。

 閱讀全文
書訊 

CIO得懂的科技業談判三策略



讓對方得利,自己更開心的雙贏談判術(Good For You,Great For Me)

勞倫斯.蘇斯金(Lawrence Susskind)╱著
陳信宏╱譯
天下雜誌出版
售價:330元


不論是採購設備,還是爭取更優惠的軟體授權合約,資訊長都必須懂得運用談判策略,才能爭取到最佳籌碼

面對如金融和軟體等充滿不確定性的技術議題,條件式協議特別有幫助,尤其高層主管對於這些領域的所知可能非常有限的時候。不論你是為了採購公司內部的電腦網路、處理專利的侵權,還是向軟體供應商尋求更好的顧客服務,不確定性都是經理人必須面對的現實。

從事高科技談判的三個策略

克倫科技公司是一家研發與生產頂尖玻璃與陶器產品的企業,其創新與獲利能力在多年來被公認為業界領袖。不過,克倫科技近年來面臨愈來愈多的競爭,利潤也因此下滑。

克倫科技的競爭對手「先進陶藝公司」在不久之前提議以兩百五十萬美元買下克倫科技的可擠壓玻璃產品線「赫希玻璃」。如果克倫科技認為出售這個產品線不可行,那麼先進陶藝公司也願意付費取得這項產品技術兩年的授權。

克倫科技要求赫希玻璃製造廠裡的三名高層主管討論這件產品的未來,這三個人分別是特殊陶器產品線經理、研發副總裁以及廠房經理。可想而知,他們對於是否該接受先進陶藝的提議各有不同意見。發明赫希玻璃的研發副總裁強烈反對賣掉這項技術,他想把赫希玻璃技術封存起來,保有原本的團隊,並且測試新的應用方式,等待需求飆增,他確信一定會有這麼一天。

產品線經理想要接受先進陶藝的提議。她認為賣掉赫希玻璃能夠換取現金,並提高短期生產力。此外,她也希望藉著促成一項有利的交易而博得執行長的好感。

廠房經理不想裁掉資深員工;他傾向藉著授權赫希玻璃技術的方式換取短期的現金挹注,並保持團隊的完整。如果需求確實像研發副總裁預測的那樣大幅上升,克倫科技即可立刻重新生產。值得注意的是,法務部門擔心授權協議可能會有違反智慧財產權的風險。

鑒於這些問題,這三位主管該怎麼協商?

策略1:避免溝通不良與建立信任

因為有複雜性,科技相關的交易經常溝通不良。談判者通常會對一項科技有先入為主的假設:這項科技怎麼運作,未來會有什麼需求。這些假設會影響他們提出的訊息,讓他們比較容易聽到自己想聽的話,忽略其他意見。

談判者可以在展開具體談判之前,先藉著共同訂定明確的流程基本規則,避免溝通不良。舉例而言,克倫科技的三名協商者也許可以達成下列幾項共識:一、每個人提出想法的時候都不會被別人打斷;二、有一個人擬出討論摘要供大家檢視之後,才能向外人談及協商內容;三、他們將以特定標準評估不同選項。流程基本規則不只能促進理解,也有助於達成創意性的協議,足以因應各方主要關注的議題。

為了促進相互理解,克倫科技的三位主管應該盡力找出其他人提議的理由,同時也釐清自己不同意的原因。要做到這一點,最好的方法就是提出許多問題,並仔細聆聽對方的回答。此外,他們應該使用不帶專業術語的簡明言詞闡述論點,並盡可能以視覺資料補充說明。最後,與其觀察別人的反應,他們還應該針對各項歧見要求對方說明抱持異議的理由。

某一套特定系統的擁護者(不論是不是設計者本身)通常會看不見系統的缺點。舉例而言,由於研發副總裁有著以自我為中心的觀點,因此別人提出的訊息一旦對他的身分或名聲造成威脅,他可能就會忍不住出現防衛心態。要消除發明者偏見,可以找一名中立專家,針對該項科技的優缺點提出獨立評論。同理,克倫科技的談判者也許可以找來一名顧問提供獨立財務分析。

當技術面的複雜問題對溝通造成阻礙,就必須強調建立信任的措施。關於複雜議題(例如科技)的談判需要許多來來回回的互相妥協,由各方針對出乎意料的提議與法務部門或直屬主管尋求確認。在這種互動當中,信任有可能在短時間內迅速崩解。例如有一方變更先前的提議,你要怎麼建立信任呢?很簡單,就是把你的心思表達出來,而且說的都是真心話。不要用好話包裝壞消息,也不要做出你不確定能不能實現的承諾。

策略2:利用條件式協議管理複雜性與不確定性

在談判之前,盡力在討論中了解,該如何處理那項技術可以對大家都有利。這麼做可能需要投資大量的時間。就算你打算找一名技術顧問來參加會議,也還是需要對相關的技術或科學原則、可用的選項與可能阻擋有效落實的障礙有粗略的理解。

談判者也必須把時間壓力與模糊不清的前景轉變為對自己有利的條件。封存赫希玻璃技術而等待市場需求出現,很可能是因應市場不確定性的明智做法。相對之下,授權這項科技則能夠帶來短期收益,但即便是最完善的合約,也無法消除競爭對手利用這個機會開發出類似科技的可能性,這兩種想法都是因應不確定性的方式,但各有不同的風險。

在我的研究裡,我發現比較能忍受高度不確定的人,比起那些一遇到不確定就忍不住要消除的人更能獲取具體利益。

 閱讀全文
前期文章 全部歷史文章
出刊日期 出刊主題
2015-09-25 臺美三大資安會議直擊,剖析20...
2015-09-24 DevOps 2015大會專題報導
2015-09-23 用單一方案做好電腦與行動裝置...
2015-09-22 ibon售票系統遭爆有漏洞,專家...
主編推薦  
連呼吸都會胖?呼吸錯了!
網路票選第一浪漫告白地點
驚見!跟人一樣大的可樂罐
小專員靠存股 月薪加6萬
我要訂閱這份報紙 我要取消這份報紙 訂報說明
.本電子報內容由 iThome online 提供
PChome ePaper 電子報版權所有,關於電子報發送有任何疑問,請聯絡 客服中心
廣告刊登消費者保護兒童網路安全關於PChome徵人
網路家庭版權所有、轉載必究 Copyrightc PChome Online

沒有留言:

張貼留言

您或許對這些文章有興趣: