Blog

[實作筆記] ASP.NET Core Identity 2.1 – 安裝與設定(一)

主要是為了方便授課上講授 TDD.NET 如何應用 Mock 隔離測試的觀念,所以打算藉由 ASP.NET Core Identity 2.1 驗證與授權 (Authentication and Authorization)的機制併整合訂購系統 (核心邏輯/資料庫存取位於另一專案)的案例,來展示 單元測試 (Unit Test)搭配 Mock 隔離的程式碼範例。

另外為了測試資料庫方便可攜供學員可以直接使用,所以打算不再使用具名的 SQL Express 檔案 (連線字串問題,多個專案要指定絕對路徑,不方便複製),而只使用 SQL Express LocalDB (預設位於 C:\使用者\使用者帳號目錄內),然後再以 Code First Migration 方式與 Seed Data 方便初始建置資料庫表格與測試資料,這些留待後續系列文章再作說明。

本系列文章並非是完整的 Step by Step 教學文,而僅是一份實作筆記,主要記錄了實作過程中一些重點摘要。同時也提供了一份程式碼範本,供個人以及對相關議題有興趣的讀者參考。

程式碼範本以 Git 版控儲存於 Github 儲庫:kenming/aspdotnet-core-identyity-2dot1-practice-note
每一個階段會標注 Tag 標籤方便提取研究與切換版本。

先簡單說明下 ASP.NET Core Identity,它是微軟所提供被歸為 ASP.NET Web 端的一個「會員 (Membership)」系統,提供給應用系統開發人員方便具有登入 (Login)驗證名稱與密碼的機制。它很明顯是 Client/Server 的 2-tier 分層方式所開發的系統,但還好因為 Login 這類機制係屬於「非功能性 (Non Functional)」需求,所以也不至於會干涉到應用系統關於「功能性需求 (如處理訂購、追蹤訂購等系統功能)」的耦合 (coupling)。未來可以全部抽換掉 Identity 而不影響到應用系統的主結構 (當然還是要稍稍花一些整合設計的心思)。

個人仍覺得 ASP.NET Identity 即便到 2.1 版本,但安裝與設定程序仍嫌繁瑣,而且從 1.X、2.0 到 2.1,每一次的安裝與設定方式大都不一樣,預期後續版本仍會有持續的變動震盪。所以更顯然絕對不要撰寫與問題領域 (problem domain)相關的邏輯在該專案內,這點從個人後續提供的範例就可以看到如何避免。

本篇文章先著重在如何安裝 Core Identity 2.1,然後新增「Scaffold Identity Item」,並修改些預設的登入選項參數 (如密碼長度),然後執行預設的首頁 (index)並選擇註冊 (register)帳號並執行登入 (login)。

閱讀全文 »

闡述軟體架構師素養的絕佳古文-柳宗元「梓人傳」

軟體架構師 (Architect) 一詞,雖是源自於國外建築產業的關鍵術語,甚而建築業大師 Christopher Alexander 的著作:「The Timeless Way of Building」(國內翻譯書為「建築的永恆之道」」,更是被軟體業界奉為設計模式 (Design Pattern)之父。不過,關於軟體架構師應具有的素養,卻是更早可以從「古文觀止」其中一篇:柳宗元所著「梓人傳」,早已道盡成為軟體架構師所需的技能為何。

這裡節錄此篇古文,並引用國內 C++ 大師早已所翻譯部份文言為白話,可以確實好好品味欣賞、一讀再讀反覆玩味思考的。

裴封叔之第,在光德里。有梓人款其門,願傭隙宇而處焉。所職,尋、引、規、矩、繩、墨,家不居礱斲之器。問其能,曰:「吾善度材。視棟宇之制,高深圓方短長之宜,吾指使而群工役焉。舍我,眾莫能就一宇。故食於官府,吾受祿三倍;作於私家,吾收其宜大半焉。」

他日,入其室,其床闕足而不能理,曰:「將求他工。」餘甚笑之,謂其無能而貪祿嗜貨者。

其後,京兆尹將飾官署,餘往過焉。委群材,會群工,或執斧斤,或執刀鋸,皆環立向之。梓人左持引,右執杖,而中處焉。量棟宇之任,視木之能舉,揮其杖,曰:「斧!」彼執斧者奔而右;顧而指曰:「鋸!」彼執鋸者趨而左。俄而,斤者斲,刀者削,皆視其色,俟其言,莫敢自斷者。其不勝任者,怒而退之,亦莫敢慍焉。畫宮於堵,盈尺而曲盡其制,計其毫釐而構大廈,無進退焉。既成,書於上棟曰:「某年某月某日某建」。則其姓字也。凡執用之工不在列。餘圜視大駭,然後知其術之工大矣。

繼而嘆曰:彼將舍其手藝,專其心智,而能知體要者歟!吾聞勞心者役人,勞力者役於人。彼其勞心者歟!能者用而智者謀,彼其智者歟!是足為佐天子,相天下法矣。物莫近乎此也。彼為天下者本於人。其執役者為徒隸,為鄉師、裡胥;其上為下士;又其上為中士,為上士;又其上為大夫,為卿,為公。離而為六職,判而為百役。外薄四海,有方伯、連率。郡有守,邑有宰,皆有佐政;其下有胥吏,又其下皆有嗇夫、版尹以就役焉,猶眾工之各有執伎以食力也。

彼佐天子相天下者,舉而加焉,指而使焉,條其綱紀而盈縮焉,齊其法制而整頓焉;猶梓人之有規、矩、繩、墨以定制也。擇天下之士,使稱其職;居天下之人,使安其業。視都知野,視野知國,視國知天下,其遠邇細大,可手據其圖而究焉,猶梓人畫宮於堵,而績於成也。能者進而由之,使無所德;不能者退而休之,亦莫敢慍。不炫能,不矜名,不親小勞,不侵眾官,日與天下之英纔,討論其大經,猶梓人之善運眾工而不伐藝也。夫然後相道得而萬國理矣。

相道既得,萬國既理,天下舉首而望曰:「吾相之功也!」後之人循跡而慕曰:「彼相之纔也!」士或談殷、周之理者,曰:「伊、傅、周、召。」其百執事之勤勞,而不得紀焉;猶梓人自名其功,而執用者不列也。大哉相乎!通是道者,所謂相而已矣。其不知體要者反此;以恪勤為公,以簿書為尊,炫能矜名,親小勞,侵眾官,竊取六職、百役之事,聽聽於府庭,而遺其大者遠者焉,所謂不通是道者也。猶梓人而不知繩墨之曲直,規矩之方圓,尋引之短長,姑奪眾工之斧斤刀鋸以佐其藝,又不能備其工,以至敗績,用而無所成也,不亦謬歟!

或曰:「彼主為室者,儻或發其私智,牽制梓人之慮,奪其世守,而道謀是用。雖不能成功,豈其罪耶?亦在任之而已!」

餘曰:「不然!夫繩墨誠陳,規矩誠設,高者不可抑而下也,狹者不可張而廣也。由我則固,不由我則圮。彼將樂去固而就圮也,則卷其術,默其智,悠爾而去。不屈吾道,是誠良梓人耳!其或嗜其貨利,忍而不能舍也,喪其制量,屈而不能守也,棟橈屋壞,則曰:「『非我罪也』!可乎哉?可乎哉?」

餘謂梓人之道類於相,故書而藏之。梓人,蓋古之審曲面勢者,今謂之「都料匠」雲。餘所遇者,楊氏,潛其名。

閱讀全文 »

整合測試還是單元測試比較有價值?

** 本文同步發表於 軟體設計鮮思維FB社群 **

看到國外某作者的一篇論述:「Lean Testing or Why Unit Tests are Worse than You Think」。這篇文章我瀏覽了兩遍,思考原作者從什麼樣的角度來看待所謂的單元測試 (unit test)。

文內有提,他純粹從經濟 (economic)的觀點來看待測試,然後接著從三項因子:成本 (Cost)、速度 (Speed)、信心 (Confidence)來比較 整合測試 (integration test) 與 單元測試 (unit test)的價值。

他的結論是認為:整合測試相對來得有價值許多。🤔

然後接著他再用 投資報酬率 (ROI, Return on Investment)與 程式覆蓋率 (Code Coverage)來佐證 整合測試 的高投資率。

這就讓我更肯定了,原作者是站在專案經理人 (PM, Project Management)的角度來看待整合測試,PM 最是偏好用指標來衡量投報率與顯性價值等。

問題是,投報率、覆蓋率等這些指標,是極難衡量隱性的因子與其所創造的價值啊! 試想想,該如何衡量軟體產品的彈性度、擴展性與維護性議題呢?

再則,整合測試與單元測試根本是兩種不同的構面與不同角色的人所負責的:

o 整合測試:產品釋出 (release)前涵蓋所有元件的測試,一般由 QA 品管專職人員擔任。

o 單元測試:系統開發期間對必要 (essential)性類別 (如 控制物件、資料存取物件、企業物件等)的測試,這必然由撰寫該類別的開發人員負責撰寫,不得假手他人。

閱讀全文 »

我家蓁妮的北韓遊記暨心得文章分享

2018_0614-0617_蓁妮的北韓遊記

才不到兩個星期,我家蓁妮從西藏旅遊會到她當交換學生的上海師範學校後,竟然緊接著又跟團去北韓玩耍了四天。哇勒,前一天才告訴我,我要阻止也沒辦法。😧

本來都以為她是說說而已,像要去大陸當交換學生、要去西藏旅遊、要去北韓玩等,都是她一年前很不經意的說出來。沒想到如今一年內都成行,真的太讓人意外。我還能說啥?!就只能祝福蓁妮能從北韓旅遊順利回來,千萬不能大嘴巴、不要隨便拍照、不要散漫不經心,小心忌口為上。

還好她的北韓旅遊平安回來,而且還用她的 iPhone 6S 拍了很多很棒的照片,而且還在她的 Medium 部落格發布平台寫了兩天文章:「北韓遊記
這個國家存在著真實嗎? 上篇 & 下篇」。老實說,我覺得她寫得甚好,充分表現出蓁妮對這次北韓旅遊真切的感想。最後她的心得充滿禪義:

「北韓存在著真實嗎?我只能用出自《紅樓夢》的一句話說明:「假作真時真亦假」意思是說當你把假的當作是真的的時候,真的也變成了假的。

《楚門的世界》裡主角楚門一直生活在巨大的攝影棚中,他不知道所有事物都經過設計和安排,這些虛假就是他的真實,直到一個攝影燈從天空墜落,他慢慢察覺到這個世界不太對勁,才明白那些曾經的真實原來都是假象。

既然沒有所謂「絕對的真」或「絕對的假」,又何必去驗證在北韓所見的是真是假?」

嗯嗯,我這裡就備份了她的旅遊照片,並將其中幾張照片分享於此供欣賞。

閱讀全文 »

大幅提昇實體硬碟讀寫效率的超效工具-PrimoCache

其實我早已購買了對岸研發的「Primo Ramdisk」,一次買三套授權,而且用了好幾年,用得非常滿意。我利用 Ramdisk 切割了約 5~8GB 的 DRAM作為邏輯硬碟 (例如磁碟代號為 R),然後把系統的暫存位置 (TEMP)指向 R磁碟,如此可以大幅提昇系統暫存檔案的讀寫效能,且也比較得以降低 SSD (作為系統碟)的寫入次數,進而延續 SSD 的使用壽命。

該家公司有另一套產品:「PrimoCache」,作用幾乎等同於最近 Intel 新發表的「Optane Cache」,採以 Optane 專屬記憶體 (比 SSD 快上幾倍)來作為 SSD 的內存 (Cache)。不過不同的是 PrimoCache 則採以 DRAM 與 隨身碟 (Flash Memory)於 Windows-based OS 層級 (也就是不能使用在如 Linux 系統)作為包括 SSD、機械硬碟的內存。

    簡單比較:

  • Optane 屬硬體規格,主機板要能有支援;PrimoCache 為 Windows OS層級的工具軟體。
  • Optane 需使用專屬的實體記憶體,目前僅支援 32GB,而且不太便宜;PrimoCache 則採以 DRAM 與 隨身碟作為一級與二級的緩存。

簡而言之,若主機板有 16GB 以上記憶體,且主要的作業系統為 Windows 7/10,那麼採以 PrimoCache 是蠻好的 C/P 值,一套授權約台幣九百,且設定彈性相當十足。

我的桌機就有 32GB 記憶體,還有一條號稱高效讀取 SSD等級的隨身碟 (64GB USB3.0)。而儲存機制除了系統碟是 256GB 的 Intel SSD 外,還有兩顆大容量的機械硬碟 (7200 轉),一顆昨為文書碟、另一則為遊戲碟。

閱讀全文 »

蓁妮的西藏風情旅遊@201806

*** 完整相片欣賞&可下載 @Flickr 相簿 ***

我家蓁妮今年二月底到上海當交換學生,但她很不安分,到處趴趴走 (因為她學分早已修完)。上海逛膩了,6月初竟然跟團跑到西藏旅遊啦。

我很擔心她會有高山不適應的症狀,特地問了我的美女好朋友慧娟。她可是一年固定會去西藏修習佛法兩三次以上,非常虔誠,當然是西藏通。她說前一個禮拜要每天喝紅景天,然後到高原地方千萬不要亂跑免得缺氧,最好也不要洗頭免得著涼會頭痛欲裂。

所以蓁妮確是有喝紅頂天,但其它根本不聽,竟然在大昭寺跑步追著狗狗玩,然後每天洗頭,她是超愛乾淨的。結果還真有些高山反應人不舒服,甚至還去衛生所打了一針 400cc 針筒身體才逐漸恢復。她的好友謝佳恩在 FB 留言說「再跑啊,蓁妮!」;但她另一位好同學唐霜霜回說「奔跑吧,蓁妮!」,哈,真是最佳損友。 🙂

蓁妮用她的 iPhone 6S 拍了西藏諸多美麗的風景人文。老實說,她取景的功力真的很棒,連我那美女好友惠娟傳給她照片瞧都讚嘆不已。喔,說起這 iPhone 6S,還是她媽媽前一個月買新的托同學媽媽回上海時拿給她的。因為蓁妮不是普通糊塗蛋,她用了一年多的 iPhone 6S 跟著衣服放入洗衣機洗然後就壞掉了;這次到西藏也發生了她的台胞證掉落在西藏的書展地上,還好有一位好心也是台胞特別傳簡訊給她才拾回的。

蓁妮在西藏旅遊大概有一個多星期,每一天到各處旅遊時會把照片透過 Line 傳給我瞧。所以說連西藏的無線上網都相當便利,這點對岸作得比台灣好上太多太多了。

其中我節錄幾張照片在此瞧瞧,若想觀賞完整的照片可至上述 Flick 相簿瀏覽。而且我家蓁妮不是只有待在拉薩市區,竟然還跑到海拔5千2百公尺高的珠穆朗瑪峰啦,所以也拍了好幾張珠穆朗瑪峰的山區照片。

布達拉宮

布達拉宮

閱讀全文 »

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal