Monday, December 26, 2022

[Protocol] AirPlay 原理

基本概念

AirPlay 是一個用來與 Apple TV溝通的協定,可用 iOS 設備或 itunes將資料交給 Apple TV進行播放,其實作使用 Multicast DNS, HTTP, RTSP, RTP or NTP 等協定,並加上些許的修改


Unofficial AirPlay Protocol Specification

Saturday, December 10, 2022

Code that Fits in Your Head

筆記:

軟體開發方法論:

Test-driven development (TDD,測試驅動開發)

Behaviour-driven development (BDD,行為驅動開發)

Domain-driven development (DDD,領域驅動開發)

Type-driven development (型別驅動開發)

Property-driven development (特性驅動開發)


封裝

描述物件和呼叫者之間有效互動的一種契約。指出有效性的一種方式是說明什麼是無效的。

Design by Contract

封裝的想法:你應該能夠與一個物件進行互動而不需要對它的實作細節有深入的了解。這目的有 2 個:

1. 它使你能夠改變實作,也就是進行重構。

2. 它允許你以抽象的方式思考一個物體

在設計時要明確指出哪些是有效的輸入,哪些是無效的輸入,以及你能對輸出提供哪些保證


Martin Fowler:如果不關注內部品質,你很快就會失去在合理時間內進行改善的能力。

內部品質差勁的狀況。起初進展很快,但隨著時間的推移,要增加新的功能變得越來越困難。即使是小型的變更,也需要程式設計師去了解大面積的程式碼,而且是很難理解的程式碼。

當他們進行改動時,會出現意想不到的損害,導致測試時間長,還有需要修復缺陷

Page 51

J.B. Rainsberger 的說法:程式碼不是一種資產,而是一種責任。

Page 98 

參數化的測試

Page 112

Postel' Law

慎重考慮先決與後置條件:對你發送出去的東西要保守,對你所接受的東西則要寬容。

輸入 null,轉換為空字串 

Page 117

試圖用1個無效的人數初始化某個物件,應該要丟出1個例外。+

Page 119

封裝的概念:

並不是禁止直接對外開放類別的欄位:類別的欄位應該被「封裝」在 getXX 和 setXXX。

主要是 1 個物件應該保證它永遠不會處於無效的狀態。這不是呼叫者的責任。物件最清楚「有效」意味者什麼,以及如何做出這種保證。

物件和呼叫者之間的互動應該遵守一個契約。這是一組先決條件和後置條件。

先決條件述述了呼叫者的責任。然後,如果呼叫程式碼履行了那些義務

後置條件就描述了物件所給予的保證。

[Refactoring]Introduction

 

1. 重構有時候,讓你可以在犯錯時,輕鬆找到 bug 的位置

2. 呆子都寫得出電腦可以了解的程式,但只有優利的程式寫得出人看得懂的程式

3. 決定程式好壞的關鍵在於它有多麼容易被修改。


重構目的:

1. 軟體更容易了解

2. 較快找出 bug

3. 協助提升程式編寫速度 (良好的模組化讓我們只要了解1小部分程式就可以)

Thursday, December 1, 2022

[Architecture] 架构师修炼之道

出色的架構本身最終不足以確保軟體品質

錯誤的架構註定導致產生更多的軟體 bugs

1. 軟體架構導論

1.1 成为软件架构师

1.2 設計思維基礎

2. 架構設計原理

2.1 制定设计策略

2.2 換位思考

2.3 挖掘關鍵架構需求

2.4 主動選擇架構

2.5 架構模式

2.6 建立模型,化繁為簡

2.7 召開架構設計研究會

2.8 展示設計策略

2.9 描述架構

2.10 架構評估

2.11 鼓勵團隊參與架構設計

3.  架構師的工具箱



n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能