讓我們的領域邏輯徹底裸奔吧

2022-01-13 11:43:15 字數 2590 閱讀 5412

菜阿斌以前寫了兩篇很好的文章:為什麼要讓我們的「領域模型」裸奔?(上),(下),在我的 架構視角面面觀中也介紹了領域邏輯經常被web 元件api、分布元件api、orm元件api、ado api 等汙染,上面的幾篇文章講了領域裸奔的重要性、以及常見專案中的領域被汙染的問題,關於如何解決該問題, 網上關於這方面的介紹倒很少。本篇將介紹如何讓我們的領域邏輯不被web元件、分布元件所汙染,解決該問題的主角將是nlite.webapi 元件,下面就讓它登場吧。

nlite web api 是基於nlite.web和 ndf的服務分發器引擎,並借助asp.net 的http原生態無狀態協議的基礎上搭建起來的 ,nlite web api 完全無侵入性,不繼承任何基類,只需要簡單的配置即可把業務邏輯自動分發成nlite web api 服務。

2.(nui 是nlite.web 元件在nuget庫中的標誌id)

3. 新增裸奔的領域邏輯:calculateservice(這裡僅僅為了演示,沒有把領域邏輯放到單獨的專案中)

public

class

calculateservice

public

int sub(int a, int

b)

public

int multiply(int a, int

b)

public

int divide(int a, int

b)

}

using

nlite;

using

nlite.cfg;

using

nlite.domain.cfg;

using nlite.web;

2. 建立nlite 配置物件

var cfg = new nlite.cfg.configuration();
3. 配置nlite的di 容器-mini容器

//

配置di容器

cfg.configure();

4. 配置webapi的url 路由對映模版:api///,那麼calculateservice的add方法對應的url為:api/calculate/add

//

配置webapi 路由服務

cfg.maprequestroute(new

servicerouteoption

//",

defaults = new

});

5. 異常處理配置

//

異常配置

cfg.add(new exceptionconfigurationitem(container =>));

6. 配置領域邏輯元件(比如demo的calculateservice

//

配置領域服務

cfg.add(new domaincomponentconfigurationitem(container =>));

1. 在瀏覽器中輸入:http://localhost:9620/api/calculate/add?a=2&b=3,那麼nlite weapi的呼叫流程:nlite.webapi->ndf->calculateservice.add(2,3)

備註:   code 是伺服器返回的狀態碼,code=1是成功,反之失敗,data 的內容就是服務返回的真正結果

2. 在瀏覽器中輸入:http://localhost:9620/api/calculate/multiply?a=2&b=3,那麼nlite weapi的呼叫流程:nlite.webapi->ndf->calculateservice.multiply(2,3)

通過上面的例子看出,我們的領域邏輯元件calculateservice,非常乾淨,沒有被任何asp.net web元件汙染,也沒有被任何分布框架的api汙染,僅僅需要簡單的領域元件註冊即可自動的發布成webapi元件。

本篇的nlite webapi 的配置和demo例子都是手寫的,其實這篇文章 :給web api 再加把柴-讓它更火起來 給大家乙個更簡單的方式來使用webapi。為了更進一步了解webapi 底層的ndf服務分發器可以看看這篇文章:

松耦合服務呼叫利器-服務分發器。

讓我們徹底搞懂C C 函式指標吧(二)

如果你已經明白了函式的引數機制,而且完全理解並實踐了3.3節的內容,這一節其實是很簡單的。只需要在函式的引數列表中,宣告乙個函式指標型別的引數即可,然後再呼叫的時候傳給它乙個實參就可以了。你可以這麼想象,就是把函式指標的賦值語句的等號換成了形參和實參結合的模式就行。下面給乙個簡單的例子 author...

嗯,讓我們徹底搞懂C C 函式指標吧(二)

如果你已經明白了函式的引數機制,而且完全理解並實踐了3.3節的內容,這一節其實是很簡單的。只需要在函式的引數列表中,宣告乙個函式指標型別的引數即可,然後再呼叫的時候傳給它乙個實參就可以了。你可以這麼想象,就是把函式指標的賦值語句的等號換成了形參和實參結合的模式就行。下面給乙個簡單的例子 author...

嗯,讓我們徹底搞懂C C 函式指標吧(三)

函式指標有意思的地方在於,它使用從0到n 1這個n個連續的整數下標直接對映到函式上。和前面一樣,我們也是模擬著定義普通指標陣列來定義函式指標陣列。首先,考慮乙個浮點數指標陣列,陣列的長度為10.我們都知道用下面的形式來定義 float pfloatarray 10 從形式上分析,用中括號明確了是定義...