發表文章

目前顯示的是 4月, 2019的文章

EIT造型技術思維(一)_繼承??抽象??_基底(父)類別並非抽象出來的

圖片
在 作者Fred Brooks所撰寫的 The Mythical Man-Month一書中 曾有提及到 "The complexity of software is an essential property, not an accidental one." 軟體複雜是與生俱來的性質 因此程式人員通常會希望愈簡單愈好 化繁為簡 通常面對複雜情況會傾向找到簡單或是邏輯一致的規則 才不會害怕 到底怎麼從複雜轉化成簡單? 通常會去關注變化和差異 將差異去除提取抽象的共同結構(留下萬變不離其宗的共通性過程就稱為抽象) 比方說: 三角形、正方形、長方形在這些具象中觀察變化 變化上就是面積、邊長、等等 那我們會提取出形狀的一個抽象結構 (從本質上來看這些都是形狀,形狀通常都會有面積、內角和等等屬性) 這是以往的思維但也就涉及到你必須找到 所有的具象,這就會導致不敏捷,因為需要找很久。 這裡舉生活化一點的例子 假設今天你面對的具象是 茶葉、水果、咖啡豆 請進行抽象 這時你會開始苦惱不像剛剛的形狀這麼理想這麼容易找到共通點 信用卡 MasterCard、Visa、........一堆具象要找到所有實在太耗時此外一些不同銀行變化 規則更複雜 或者抓一堆貓 每隻鬍鬚都不同這時你把鬍鬚去除 每隻尾巴也都不同乾脆也去除 .....其他又有不同的比如眼睛、鼻子、..... 因此我們得到 一個沒有尾巴、沒有鬍鬚、沒有眼睛、嘴巴的這個叫貓 確實得到簡單(不變的部分)但也傷害到其完整性 因此若要敏捷就不能在尋找不變!!!!!! 杯子並非從果汁、咖啡當中抽想出來的,但不論果汁跟咖啡都能裝進去 皮包也不是從一堆生活物品中抽象出來的不變部分 Essence 簡單一詞其實於東西方認知是有差異的 西方人認為簡單一詞是指 不可或缺的 東方人則認為是永恆不變的本質或真理 一隻貓就必須要有尾巴、鬍鬚所以不能去除 那要如何達到簡單呢?? 你不用刪除也不需要去剖析差異直接把一整隻貓裝進皮帶中 過去我們追求不變,追求不變作法則是將變化刪除,而非有效掌握變化。 上述提到的東西方觀點 其實只是不同視角、思維(一體兩面) 任何視角本身無對錯、更多視角才能讓設計更可靠。 比

Redis開發學習(4)_StackExchange.Redis_進行String相關操作

圖片
在一些資料整理上有提到雖然目前針對.NET 釋出相關Redis Client API  不只一個StackExchanged.Redis 但是ServiceStack是要付費的!!!!!!! 而且在舊新版本的切換上據說語法也會有不相容的問題 (1)資料塞入指令 寫法1.透過StringSet 1 IDatabaseObject.StringSet( "Key" , "value" ); 寫法2.透過Execute方式 1 IDatabaseObject.Execute( "SET" , "Key" , "Value" ); 程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using StackExchange.Redis; namespace RedisProject1 { class Program { static void Main( string [] args) { Console.WriteLine( "啟動資料庫連線" ); ConnectionMultiplexer myConn = ConnectionMultiplexer.Connect( "localhost:6379" ); var myEndpoints = myConn.GetEndPoints();

Redis開發學習(3)_StackExchange.Redis_打印Server相關資訊

圖片
這次我們回到C#程式這邊使用StackExchange.Redis API進行開發 簡單來講其實就是把第二堂學習中指令的方式轉成用程式來進行操作而已 或許有人覺得上次介紹的安裝方式有點難 那我們在分享第二種方式導入StackExchange.Redis Step1. Tools -> NuGet Package Manager -> Manage NuGet Packages for Solution Step2. 左側切換到 Online頁簽後 在去右上角搜尋欄查看看 Redis 一鍵點擊Install (一些描述在右側可以查看的到) 如果跳了窗顯示如下描述 就切換你的.NET Framework version再重試一次 對你的project右鍵進到屬性後的Application 將 default設的4.5改為4.6.1 再Try一次 還是不行調整成 4.7.2再Try一次 有缺framework就再自行下載 https://dotnet.microsoft.com/download/visual-studio-sdks?utm_source=getdotnetsdk&utm_medium=referral 這裡就不用這麼新的版本了 暫時使用1.2.6搭配.NET  Framework4.5 (在某些公司中可能會固定使用特定穩定版當在串其他庫時就要小心連鎖反應) 這種安裝方式會有個壞處就是只能抓最新版 這裡記得當你對一個方案進行過Install command執行後 之後方案中其他的project(可能後來才new的)要手動在自己 Add Reference 當你已經開啟Redis Server 而且也已經New好一個專案並導入StackExchange.Redis之後 就可以嘗試看看如下有關於Server作業的程式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 4

Redis開發學習(2)_In-memory database跟On Disk(Relational) database比較_cli的基礎20大指令(資料型態介紹)

圖片
傳統的B/S 架構中 由於Server端餘後端進行資料存取過程會導致磁碟操作負載 那就有可能客戶端會反應系統更新處理資料變慢的可能 尤其當資料數達一定量後也會時常發生 以往可能處理方式會再多買幾台Server擴充硬碟等等 那在軟體上的問題解決方式則會有如下兩種 其基本核心思想都是在於避免直接對DB進行存取訪問 (1)網頁靜態化(對於網站、網頁應用) 這塊由於沒有很深入 大概意思應該是說 在進行資料庫訪問之前就先透過其他的process先把DB中的資料抓出來再生出靜態網頁 當客戶端要訪問這些資料時 Server就不再是直接去操作DB 而是去把應靜態化頁面展示出來 https://kknews.cc/zh-tw/other/5m8a5ql.html https://www.youtube.com/watch?v=UxbiRCA6IBk (2)將資料保存到記憶體中(常見的In-memory DB: MemoryCached , Redis) 而當客戶端需要資料更新處理時對於Server訪問後 Server會先去memory中判斷是否有該用戶要的資料若沒有才進行DB的I/O 基礎的cli指令 接下來我們要示範的是 基礎的cli指令 各位我們在上一次的範例透過C#嵌入StackExchanged.Redis 的小專案有新增一個key 這次我們要進行一個實驗 來讓你更加對In-memory這個詞有深刻體悟 這次我們將key替換成name 並透過API設置 value 為 Wang 你會發現在自開的cli  terminal中也同步更新了目前資料庫的key list cli的基礎20大指令 (備註:對於指令部分是大小寫都可以的喔!!! 差別在於有些模糊字串比對的pattern會區分大小寫 輸入到一半打TAB會自動補齊 是很好用技巧 此外 1 在 redis cli command中大部分代表成功 反之就是 0 ) 指令1. KEYS pattern   取出鍵名清單 查看目前存於記憶體中所有key Redis指令如果想要查看目前的鍵值 可以在你啟動完cli後 輸入: keys * 會列出存於記憶體中所有key 你可以看到新增的n