0%

Cynefin 決策框架

簡介

Cynefin(發音為 ku-nev-in)是一個由 Dave Snowden 開發的決策框架,用於幫助理解不同類型的情境,並採取適當的行動。Cynefin 框架將決策環境分為五個領域:清晰(已知)、困難(未知)、複雜(未知的未知)、混亂和失序,且不同的領域皆有一套處理的流程。

作為決策支援工具,Cynefin 只是幫助我們怎麼做出決策而非替我們做決策。

閱讀全文 »

最近在讀 Uncle Bob 的書籍:Clean Craftsmanship,其中有解說到倫敦學派 TDD,覺得挺有趣想寫份筆記解說。
其中不只有倫敦學派的 TDD,還有芝加哥學派的 TDD,往後再特別寫一篇文章紀錄之。

倫敦學派 TDD 的核心原則

倫敦學派 TDD(也稱為「模擬派」或「外部-內部開發」)是由倫敦的開發者群體發展而來的 TDD 方法論。其核心原則包括:

  1. 外部-內部(Outside-In)開發:從系統的外部界面開始,逐步向內部實現。首先定義高層次的行為和介面,然後再實做底層細節。

  2. 關注交互而非狀態:倫敦學派更關注 component 之間的交互和協作,而不僅僅是單個 component 的狀態變化(如果和我一樣是後端開發者,可以想像成是關注 層級 之間的協作,而不是單個 方法 的狀態變化)。

  3. 大量使用 Mock:為了隔離被測試者,倫敦學派廣泛使用 Mock 物件來取代真實依賴。這使得測試可以專注於特定單元的行為,而不受其依賴項的影響。

  4. 行為驗證:通過驗證被測試者與其依賴之間的交互行為來確保系統正確性,而不僅僅是驗證最終結果。

  5. 設計優先:倫敦學派強調在實現之前先設計良好的介面和使用方式,測試驅動設計(TDD)同時也是設計的過程。

閱讀全文 »

前言

Hi all, 最近在團隊開發過程中,經常需要為 API 撰寫 client SDK,這是一項重複性高且耗時的工作。如果手動撰寫,不僅效率低下,而且容易出錯。最近,我們團隊(Jake、Kevin)發現了 Microsoft 開發的 Kiota 工具,它可以根據 OpenAPI 規範自動生成強類型的 HTTP client SDK,大幅提升了我們的開發效率,覺得蠻好玩的 ,故做個筆記紀錄紀錄。

Kiota 是什麼?

Kiota (Keee-oh-tah) 是 Microsoft 開發的開源工具,專門用於根據 OpenAPI 描述生成類型安全的 API client。它的名稱來源於希臘語中的「κοιτά」,意為「看」或「觀察」,象徵著它能夠「觀察」API 描述並生成相應的 client code。

安裝 Kiota

要使用 Kiota,首先需要安裝 .NET SDK 7.0 或更高版本,然後通過 .NET CLI 安裝 Kiota:

dotnet tool install --global Microsoft.OpenApi.Kiota

安裝完成後,可以通過以下命令驗證安裝:

kiota --version
閱讀全文 »

什麼是服務導向架構 (Service-Oriented Architecture, SOA)?

Hi all, 今天想聊聊在系統架構中的一個概念——服務導向架構 (Service-Oriented Architecture, SOA)。

簡單來說,SOA 是一種設計方法,它將應用程式功能以服務 (Service) 的形式提供出來,讓這些服務可以被其他應用程式使用。想像一下,如果把一個大型應用程式拆分成多個獨立的小積木,每個積木都能獨立運作,還能和其他積木組合在一起完成更複雜的功能,這就是 SOA 的核心思想。

閱讀全文 »

前言

Hi all, 今天在進行 code review 時,我們討論到一個有趣的問題:如何在 C# 中動態解析 JSON 字串,特別是當我們不確定 JSON 結構,或是結構過於複雜不值得建立完整模型時。

傳統上,我們可能會使用 Dictionary<string, object> 或建立專用的類別來解析 JSON。但今天我想分享另一個更靈活的方法:使用 C# 的 dynamic 類型搭配 ExpandoObject

閱讀全文 »

Hi all,因應工作需求,我們使用了在日常開發中不太常用的 HttpContextAccessor,覺得很方便,特此做個筆記。

情境介紹

  • 多個 API 需要共用相同參數(以下以 customerId 為例)。
  • 業務邏輯層需先將 customerId 轉換後再使用。
  • 如果在每個 API 都分別定義相同的 Request Model 並實現相同的轉換邏輯,程式碼會大量重複。
  • 因此,我們希望透過依賴注入(DI)注入一個 StatusContext,在其中統一取得並轉換 customerId,上層使用時只要注入即可。
閱讀全文 »

How to apply APM to .NetCore

Some referred from FeloSearch

Certainly! Setting up Elastic APM with your .NET application involves several steps, which I’ll outline in detail below. We will cover installation, configuration, and deployment, ensuring you’ll be able to monitor your .NET application effectively.

1. Prerequisites

  • Elastic Stack: Ensure you have an Elastic Stack (Elasticsearch, Kibana, and APM Server) set up. You can do this locally, but it is often deployed as part of an Elastic Cloud setup.
  • .NET SDK: Ensure you have the .NET SDK installed.
  • NuGet Package Manager: This is needed for installing necessary dependencies.
閱讀全文 »

接續上篇,書中有一個小篇章在講述狀態這件事情,並講述到 STM 這個防併發的做法,覺得蠻有趣的故作個筆記。

What’s Software Transaction Memory

簡單來說,它是個限制存取資源的機制,STM 透過把一組 (讀取, 寫入) 封裝在一個 transaction 中,來實現所謂的操作原子性,其中最主要的目的在於避免資源競爭、Dead-Lock 的情況發生。

以下是 STM 的一些特性:

閱讀全文 »

有天心血來潮去天瓏書局逛逛,看到了一本由 UncleBob 撰寫的 Functional Design。乍聽之下感覺還不錯,就當給自己的 2025 年新年禮物回家讀,所以才會有這篇筆記。

什麼是 Functional Design

簡單來說,就是以 function 的方式撰寫程式碼(我知道這樣有講跟沒講一樣…)。

以下是 Uncle Bob 的回答:

Programming without assignment statements.

以下是我結合書上列出來的觀點及一些自身的想法所列出來的 Functional Design 的幾個特色:

  1. Always f(x)=yf(x)=y
  2. Function 內不會有變數上的變動
閱讀全文 »