---
# System prepended metadata

title: ShinGo讀書筆記

---

# ShinGo讀書筆記

## abp
IDDD那本第28頁有issue concept example (issue aggregate)
讀完abp這兩本書
應該可以指導同事哪些功能要放在哪一層boundraries要怎麼切分

## DDD
![](https://i.imgur.com/IcaayxE.png)


https://ddd-crew.github.io/ddd-starter-modelling-process/

### Event Storming
https://www.eventstorming.com/

## api first & as product

91app首席架構師Andrew
https://columns.chicken-house.net/

104API
https://developers.104.com.tw/swagger-ui/?urls.primaryName=4

Linkedin API
https://developer.linkedin.com/product-catalog

OpenAI API
https://openai.com/api/

## Webhook
使用 Webhook 和連接器將您的應用程式與 Microsoft Teams 整合
https://learn.microsoft.com/zh-tw/events/build-may-2021/microsoft-365-teams/connection-zone/con066/

## Angular

https://morioh.com/p/9c3f140e8d75?f=5e465398856ed07d4dcd73ed

## 顧問輔導 & WebAPI

顧問部落格
Bruce Chen (i@kkbruce.tw)
https://blog.kkbruce.net/

### Clean Architecture
https://ithelp.ithome.com.tw/articles/10268953
Clean Architecture 把系統分成四層，這四層不是由上而下排列，而是由外而內排。 排列的依據為：「越細節的越外面，越核心的越裡面。」這四層分別為：

Entities
核心業務、重要資料所在地。不管你在什麼場景，做什麼操作，在你的問題領域中不論有沒有系統幫忙，你都必須得做的事。

Use Cases
這一層包圍在 Entity 之外，定義著對於 Entity 邏輯與資料的使用時機與操作順序，是一個管「自動化」的傢伙。

Interface Adapters
系統的邊界，對外取得請求內容，轉換成內層認識的樣貌、並尋找適當的 Use Case 來執行任務，最後再轉換成外界認識的樣貌送出去。同時，系統對外發出的請求，也會在這一層轉換。

因為位處系統邊界，做的事大多都是一些轉換的工作，所以命名為 Interface Adapter。

Frameworks & Drivers
系統中最細節的部分，大部分都是 I/O，舉凡網路、檔案、資料庫、人機介面等，都屬於此範圍。

那麼什麼叫核心，又什麼叫細節呢？實際操作時，其實就是：「離 I/O 越近的越細節，在外層；離 I/O 越遠的越核心，在內層。」

Uncle Bob 說：「Entity 與 Use Case 是你生意能經營的主要推手，必須慎重對待。I/O 雖然有重要，但是是重要的細節，應該要可以簡單被抽換。」

這裡留個思考題：「Data driven 與 UI driven 的開發方式，與 Clean Architecture 搭配使用的話，會發生什麼事呢？」

三大原則
Clean Architecture 討論了很多設計上的注意事項，而簡言之可以歸納出三大原則：

分層原則：如上一節所述，所有系統元件應該要分門別類安置，不要亂放。
依賴原則：依賴應該要盡量「由外而內」，不能「由內而外」，否則依賴關係會亂掉，造成不必要的耦合。
跨層原則：外層只能認識同一層或往內一層的元件，不能認識「兩層以外」的任何元件。


## Code first

EF Core only have 2 ways:
1.Code first
2.Code first from db
https://ithelp.ithome.com.tw/articles/10208501

https://www.ryadel.com/en/code-first-model-first-database-first-vs-comparison-orm-asp-net-core-entity-framework-ef-data/

代碼優先方法具有以下優點：

不需要任何圖表和可視化工具，這對於中小型專案非常有用，因為它可以為我們節省大量時間
一個流暢的代碼 API，允許開發人員遵循約定優於配置的方法來處理最常見的方案，同時還讓他有機會在需要自定義資料庫映射時切換到自定義的、基於屬性的實現覆蓋
然而，它也有這些缺點：

需要對ORM程式設計語言和約定（用於實體框架的C#）有很好的瞭解
維護資料庫有時可能很棘手，以及在不丟失數據的情況下處理更新;實體框架的遷移支援極大地緩解了問題，儘管它也以負面的方式影響了學習曲線

做出選擇
通過選項的優缺點，沒有整體更好或最好的方法;相反，我們可以說每個專案方案都可能有一個最合適的方法。

但是，只要我們處理一個相當小的專案（例如微服務）和/或我們的目標是靈活、可變的小規模數據結構，採用代碼優先方法幾乎總是一個不錯的選擇。

## Git

https://andrewintw.github.io/introduction-to-version-control-with-git/
