JetcoPG + Magento2 + SpringFramework = FML
好久沒寫過工作相關的文章了,積了多少怨念,在這裏發散一下。

對上一次 是什麼時候了?本來以為經過「workpress 之役」的我也許成長了不少,結果在老闆的幹勁下我還是抬不起頭來……

名為「洞眼商機」的遊戲

故事得從我們偉大的 Marketing 小姐開始 ( 以下以 M 小姐略)。

===

今天真是意外的平靜啊,雖然不是無事可做,應付客人的要求在公司網站上修這補那什麼的,排程的話要做完基本上不可能吧。反正不是緊急的「ticket」先丟在一邊,篩著篩著結果全都被我丟一邊去了,就在我打算重新降低「緊急」的基準線,準備重新排程一次的時候。M 小姐將轉過身來,對著我旁邊的營運經理 Q 先生説:「我覺得現在公司的網站不夠自動化,本應由系統處理的工作我們卻人手處理。公司人手不足,自動化可以將人力節省出來,把時間花在找到更多客源比較好。」

雖然我在這裏工作的時間尚淺,但人手不足的問題在我剛入識沒多久就體驗到了,一人 IT 、一人經理、一人營銷、一人人力資源、兩人會計……基本上都是「一人部門」。這樣也能運作起來呀!我想,比起「資源得到充分運用」,用「過分運用」來形容比較恰當。

「自動化當然是好事,可是你看,現在公司的網站,比起原來的用途,我們之後為了侵佔這部分的市場,加的這個功能,跟網站本來的架構就有衝突。」

Q 先生複述著我在「源碼堆埴區」裏面費盡九牛二虎之力解讀運作原理,分析後發現的問題。打個比喻的話就像是做了一輛車,眼看別人用船在海邊航行很悏意,這邊也來參一腳。於是找木匠做了個木舟釘在車子下面。結果路上行走要人推,海上行舟也要人抬。兩頭不到岸,運作起來需要額外的人力。

「現在你説要增建這個部分,這會讓之後的維護變得更困難,因為現在的 IT 同事維護起來已經叫苦了,嚇走他的話我都那裏找第二個來槓啊?」

沒錯,像這種「氣蹍船可以水陸兩用,在木舟下面也加個氣蹍吧!」我可不幹喔?!可是真的要做的話我也沒辦法不做啦,畢竟我一介打工仔沒什麼決策權就是了。

在 Q 先生的一番斡旋之後決定捨棄之前增建的部分,採用另建一個網站的提案。

惡夢的開始

經過一輪開會討論與籌備之後,備案提到老闆面前。

「不能快一點嗎?」

在生產過程中有一個鐵三角,分別是「質量」、「時間」和「成本」:
1. 高質量 & 低成本 = 時間長
2. 時間短 & 高質量 = 高成本
3. 時間短 & 低成本 = 低質量

老闆覺得,成本不是問題,他要的是短時間,其它怎麼樣都好,要盡快成事,最好是現在就立即就有!

可是以現在的功能來看,就算截掉不必要的功能,M 小姐説要做的這種網站質量是頗高的,但老闆覺得我們想的別人一早已經想過和做過了,網絡上肯定有著類似的東西,只要將這些買回來,適當地拼湊一下好可以了。

惡夢連鎖

用這個吧!這個東西有許多插件可以買,買買買不用編程,節省時間人力!

—— Magento 2 ,好像是一個網上商店的東西,窄看之下 Magento 的確很強大,但某些適用於本地服務的插件得自己開發,而這個 Jetco Payment Gateway 正是其中一個。

因為排程中 Payment Gateway 是首要做的功能,畢竟沒有這個就收不到錢,收錢很重要。

可是這個東西提拱的 API 是 Java 或 .Net ASP,雖然我熟識 .Net ,但 Q 先生説一台 Windows 的 VM 貴死人了所以用 Java 吧。公司本來的網站用的是 Django ( python ) ,但還是整合了這個 Payment Gateway,到底是怎麼做到的?

簡單點來説就是用 Python 直接調動 JVM ,在我看來是非常粗暴的手法,每次收錢就得啟動一次 JVM ,結果整個結帳過程等待時間變得很長。

受不了了我只好花了一個星期架了一台 tomcat ,反解 Jetco 的 API,現學 Java 寫了一個綜合收錢接口,這東西可以橋接原本公司網站收錢流程,往後新增收錢的帳號也更方便,加上我簡化了這故意複雜化的 API,算是為後人做了一件好事吧。

也就是説短短幾天我做了這幾件事:
- 學習編寫 Java
- 因為 Jetco 的 API 格調太低,只支援單個帳號,我只好反解 Jetco 提拱的 API ( jar ),分析並修改成乎合我想要的樣子
- 現學 SpringFramework,寫一個簡化版接口

然後就開始著手寫 Magento 2 的 payment method plugin

Magento 2 是大魔王

沒想到 Magento 是一個超級複雜的東西,懂 PHP 是沒有用的,因為 Magento 2 有一套自己的架構,單憑源碼追蹤跟本夠不到,再説這個設計讓追蹤源碼變得非常困難。一大堆 xml 設定,dependency injection 這種看似高檔的功能其實是用來補救 xml 設定做成的效能損耗。ObjectManager 是一個很可怕的巨人,隨便  var_dump 會造成人命傷亡,安裝 plugin 時又得無里頭部署資源什麼的……

我開始懷疑這也許是創做就業的陰謀:
其一作為普通商店實在是 Overkill
其二作為企業級商店,因為形象問題通常都會著實地自己開發一個
其三作為網站開發者的角度來看,這東西的 Learning Curve 實在太高,學會的東西只能應用在 Magento 上,流動性太低

然後找了找真的有徵人説想聘 Magento Developer,而且人工很高!

單單是 Payment Gateway 這東西已經弄了兩個星期,還沒能搞懂要怎麼接到 Payment Gateway 上,另一邊又來了。

結果又因為原本網站的客戶需求弄得我不得不放下這邊的工作。

所以説你想要我幹多少工作啊?!總覺得自己作為程序員的規格變得越來越奇怪了?
Profile picture
斟酌 鵬兄
Mon Sep 19 2016 15:37:42 GMT+0000 (Coordinated Universal Time)
Last modified: Mon Sep 19 2016 15:38:15 GMT+0000 (Coordinated Universal Time)
Comments
No comments here.
Do you even comment?
website: 
Not a valid website
Invalid email format
Please enter your email
*Name: 
Please enter a name
Submit
抱歉,Google Recaptcha 服務被牆掉了,所以不能回覆了