自從轉了工種後, 做過不同類型的projects, 亦試了應用不同的平台, 然而, 技術不是重點, 最重是選擇最理想的工具. 根據經驗整理後, 重點有四項: 用戶群, 是否需要跨平台, 硬件配套, Standalone / Multi-tier.
用戶群
用戶(End-user) 即是系統的最終使用者. 其實分幾種層面:
對外 (External), 用家是客戶, 重點是要方便使用, 非必要的話不用安裝軟件到”衪們”的裝置上, 而且其使用平台亦相當多變. 要覆蓋最大範圍的話, 都會選擇用Web-based 平台, 只要有瀏覽器(Browser)便可以給用家使用. 所以ASP.net MVC 會是首選.
對內 (Internal), 用家通常是公司內員工, 或者說是自己以外, 公司以內的任何人. 通常已經有一套標準, 較容易控制, 數量相對External 比較亦較小, 所以使用WPF MVVM 會是較佳的選擇. 然而, 若果在大企業, 多國之間都有其IT department, 而亦有workflow 須要跨國進行的話, ASP.net MVC 反而值得考慮; 總之在internal 環境中, 的確須要視乎情況決定.
自己 (self), 這個是自己加入的. 有時候為了加快delivery, 可能部份configuration DIY tools 未能提供, 只會加入到database / xml config 中, 這種情況就須要靠自己了. 為了不讓自己遺臭萬年以及方便將工作推卸出去, 自己都會建立一個介面去進行維護. 當然, 這個是什麼都不太重要了, 通常決定方針都嫁雞隨雞, 跟回application. 當然做in-house 有時須要維護不同模組, 自建簡陋的 MMC snap-in反而會是不錯的選擇.
是否需要跨平台
這裡的跨平台, 其實是用戶群的衍生, 決策重點是自己是否能夠預估End-user 是怎樣使用系統. 現在公司常用的系統都是Windows (當然, 部份公司會用Mac); 然而, 流動平台的興起也令End-user environment 出現變數. Android / iOS / Blackberry 不同的操作平台, 即使用自詡跨平台的Java 也吃不消, 這個時候, 反而 Web-based 平台將所有東西中央管理可以發揮到; WPF 的話, Linux 的Mono 也只支援WinForm, 而相類似的Silverlight 連Microsoft 也depreciated, 支援mobile device 亦因此變了場夢.
硬件配套
部份系統運作, 用戶端須要配合硬件, 例如醫療儀器須要透過COM / LPT / port 與電腦溝通, 生物認證須要用指模/瞳孔等傳送認證資料. 若有這種關聯的話, 則非WPF MVVM 莫屬. 若ASP.net MVC 這類web 平台須要運用的話, 則須要安裝ActiveX control / WebUSB API, 但這類則限制了用戶端平台, 而且ActiveX control 亦已depreciated 及WebUSB 仍未成熟, 暫時Web 平台, 即係ASP.net MVC 不是一個好選擇.
Standalone / Multi-tier
Standalone 即是單一系統, 所有東西(包括Database) 都放在自身系統中, 好處是方便部署(Deployment), 只須copy and paste 便完成. 在WPF MVVM 中, 亦具備此功能. 只要確定用戶端有安裝相對應的.net Platform 版本便可; 然而在ASP.net MVC 中, 即使使用Local DB, 但它仍須要在client 中安裝及設定IIS才可使用, 故這方面它較為輸蝕.
Multi-tier 是早年興起的系統架構 (Application Architecture), 即是將系統模組化 (Modulize), 並將不同模組部署在不同伺服器中(鐵 / VM / Container)執行. 從而做到管理上的 SoC (Separation of Concern). 而WPF MVVM 中, 即使用接駁 remote Database, 也只是2 tiers, 若須要設計的話, 則須要將其Controller 搬離至application server 中; 而ViewModel 和 View, 則只是控制UI部份; 而ASP.net MVC 中, 本身寄居在Web server 中的特性也使它天生支援multi-tier (包括用戶的Browser 和remote database, 已經3 tiers), 然而, 若想將View 和Controller 硬件分離的話, 則與WPF一樣, 建立web service 並配置於另外的伺服器中.
總結
總括而言, 其實選擇WPF MVVM 還是ASP.net MVC, 已變得像Form-based vs Web-based, 在決定時, 最重要是知道用戶條件及規劃的長遠性. 引用一句: 沒有最好的裝備, 只有最適合的裝備.
參考資料
- WPF Mono,
http://www.mono-project.com/docs/gui/wpf/ - A break from the past, part 2: Saying goodbye to ActiveX, VBScript, attachEvent…, Microsoft,
https://blogs.windows.com/msedgedev/2015/05/06/a-break-from-the-past-part-2-saying-goodbye-to-activex-vbscript-attachevent/#RSzVEg7mXGFegkfK.97 - Access USB Devices on the Web, Google Developer,
https://developers.google.com/web/updates/2016/03/access-usb-devices-on-the-web
Leave a Reply