MASA Framework 整體設計思路

2022-09-11 20:21:18 字數 4427 閱讀 5204

年初我們在找一款框架,希望它有如下幾個特點:

學習成本低

只需要學.net每年主推的技術棧和業務特性必須支援的中介軟體,給開發同學減負,只需要專注業務就好

個人見解:一款好用的框架應該是補充,而不是顛覆或過度創新

對擴充套件開放

可以按照業務需求任意調整依賴實現,而不被**在乙個架構思路上

功能強大卻不限制架構,從單體到soa再到微服務都可以適應

因為乙個系統中總有複雜的也有簡單的,最好能全面覆蓋我們的業務場景

行業不限

既能支援傳統行業的業務特殊性,又可以支援網際網路行業的高併發特性

穩定性

有嚴格的測試標準,用起來更安心

在我們做技術選型的時候,對dapr的研究越深入,對我們想要做的事情就越清晰

站在dapr的設計上我們找到了乙個平衡點,mecha

可以看下這篇文章(mecha:將mesh進行到底):

mecha是通用的,高度可配置的,可重用的元件,提供分布式原語作為現成的能力

mecha 可以與單個micrologic元件一起部署(sidecar模式),也可以部署為多個共享(注:我稱之為node模式)

mecha不對micrologic執行時做任何假設。它與使用開放協議和格式(例如http/grpc,json,protobuf,cloudevents)的多語言微服務甚至單體一起使用

mecha以簡單的文字格式(例如yaml,json)宣告式地配置,指示要啟用的功能以及如何將其繫結到micrologic端點

與其依靠多個**來實現不同的目的(例如網路**,快取**,繫結**),不如使用乙個mecha提供所有這些能力

mecha提供的是能力,不論是單體還是分布式

mecha與服務之間互動是有開放api標準的

mecha可以通過文字格式(yaml或json)宣告式地配置

對於.net開發來說,更習慣用json

應用需要多種多樣的能力,mecha提供了一整套解決方案卻不強繫結你所有都要用到,按需即可

每個能力有不同的實現版本,可以根據自身業務情況替換其中某一部分的能力

mecha的好處是業務邏輯和越來越多的分布式系統問題之間的松耦合,除了可以解決分布式以外,我們是否也可以延展成業務邏輯和架構之間的松耦合?

當然,說到底就是dll而已

在分布式架構中,它以sidecar的形式守護在應用身旁。

如果在.net專案中,它是否可以類似.net framework作為基建/介面卡/中介軟體/匯流排等身份駐留在.net程序中提供基礎能力?

乙個完整的設計要先從概念開始,為了降低學習成本我們直接復用dapr的概念定義

構建塊提供介面標準,並為了達到某個基礎能力的串接不同元件(也通過介面),松耦合但不脫鉤

元件基於介面標準的實現,比如服務間通訊提供httpclient和dapr service invocation等不同元件的實現

工具庫提供更抽象的底層能力,供業務和元件完成自身功能,如快取/配置/資料操作/安全等

我們首先完成了用於指導架構相關的部分,如ddd、cqrs、minimal apis擴充套件等,並保持單元測試覆蓋率在90%以上,目前93%。

以contrib的目錄結構為例:

masa.contrib

├── solution items

│ ├── nuget.config

├── src

│ ├── basicability

│ │ ├── masa.contrib.basicability.dcc configuration api

│ ├── configuration

│ │ ├── masa.contrib.configuration

│ ├── data

│ │ ├── masa.contrib.data.uow.ef unit of work

│ │ └── masa.contrib.data.contracts.ef protocol ef version

│ ├── ddd

│ │ ├── masa.contrib.ddd.domain in-process and cross-process support

│ │ └── masa.contrib.ddd.domain.repository.ef

│ ├── dispatcher

│ │ ├── masa.contrib.dispatcher.events in-process event

│ │ ├── masa.contrib.dispatcher.integrationevents.dapr

│ │ └── masa.contrib.dispatcher.integrationevents.eventlogs.ef cross-process event

│ ├── readwritespliting

│ │ └── cqrs

│ │ │ └── masa.contrib.readwritespliting.cqrs cqrs

│ ├── service

│ │ └── masa.contrib.service.minimalapis best practices for [minimalapi]

├── test

│ ├── masa.contrib.dispatcher.events

│ │ ├── masa.contrib.dispatcher.events.benchmarkdotnettest

│ │ ├── masa.contrib.dispatcher.events.checkmethodsparameter.tests

│ │ ├── masa.contrib.dispatcher.events.checkmethodsparameternotnull.tests

│ │ ├── masa.contrib.dispatcher.events.checkmethodsparametertype.tests

│ │ ├── masa.contrib.dispatcher.events.checkmethodstype.tests

│ │ ├── masa.contrib.dispatcher.events.onlycancelhandler.tests

│ │ ├── masa.contrib.dispatcher.events.checkmethodstype.tests

│ │ ├── masa.contrib.dispatcher.events.tests

│ ├── masa.contrib.data.uow.ef.tests

│ ├── masa.contrib.dispatcher.integrationevents.eventlogs.ef.tests

│ ├── masa.contrib.ddd.domain.tests

│ ├── masa.contrib.ddd.domain.repository.ef.tests

除了masa framework,我們馬上將開源blazor元件庫(masa blazor),包括管理後台模板(masa blazor pro)

後續還有masa stack開源產品,基於masa framework打造的一站式paas平台,具備devops、微服務觀測治理、資料治理等平台級能力

masa.eshop是使用masa.framework復刻了eshopondapr的功能,並提供了多種架構方式的示例。

專案整體流程

寫這些東西希望能夠給剛剛畢業的大學生在幹軟體專案中加一些指導性的作用,可能不能直接應用,但是每個階段一般是這樣的,如果可以靈活運用的話,問題應該不大 1.確定調研人員和分配任務 a 確定調研 概要設計 詳細設計和程式設計人員 b 寫出工作計畫和工作行程,做好關鍵路徑。2.初步調研 a 確定領導的管理...

Hibernate整體理解

hibernate過了一遍,對這個持久層的框架有了基礎性的了解,對框架的真正熟悉還要靠專案實戰,動手運用。下面從整體上總結一下我的理解和體會。hibernate的實現原理很複雜,尤其是一些效能優化發面的,跟struts框架相比,要高深很多。總的來說hibernate涉及到的內容成塊狀分布,功能比較明...

專案整體回顧

專案介紹 專案中所涉及的效果有 抽屜效果,資料載入動畫,輪播圖 其他 此專案總所涉及的一些技術包括上面提到的還有 資料解析 主要是js解析和第三方解析 資料的本地訪問 下面我就這所有功能的實現進行詳細的講解 1.暴走雜誌的頁面內容展示 我一般搭建展示類的頁面時通常喜歡用xb,storybord,也就...