溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

面向聲明式API編程(DAP)- Mars-java框架

發(fā)布時(shí)間:2020-06-28 03:02:17 來(lái)源:網(wǎng)絡(luò) 閱讀:565 作者:wx5dd3a4c7ce05c 欄目:編程語(yǔ)言

聲明式API編程(DAP) 框架

* 10秒鐘就可以建立一個(gè)后端服務(wù)
* 甚至沒(méi)有Controller的概念
* 分布式鎖,只需要一行注解
* 本機(jī)測(cè)試,響應(yīng)時(shí)間最低可達(dá)9毫秒,吐吞量最高可達(dá)1200

什么是聲明式API編程(DAP)

按照傳統(tǒng)的開(kāi)發(fā)方式,如果要開(kāi)發(fā)一個(gè)后端接口,需要分為以下三步

* 創(chuàng)建controller
* 創(chuàng)建service
* 創(chuàng)建dao(甚至?xí)?chuàng)建存放sql的xml)

但是,我們編寫一個(gè)接口,重點(diǎn)應(yīng)該是放在業(yè)務(wù)邏輯上的,也就是說(shuō) 我們的關(guān)注點(diǎn)應(yīng)該在第二步,但是通常第一步和第三步的重復(fù)工作量讓我們感到窒息,所以我梳理了一下,制定了一個(gè)新玩法,這套新玩法就叫聲明式API

* 寫業(yè)務(wù)邏輯
* 聲明一個(gè)API給前端
* 將API與業(yè)務(wù)邏輯關(guān)聯(lián)

所以我們是這樣玩的

編寫業(yè)務(wù)邏輯

@MarsBean("testService")
public class TestService {

    要返回的數(shù)據(jù)類型 selectListForName(參數(shù)1, 參數(shù)2, 參數(shù)3, 參數(shù)4){
        // 第一步 根據(jù)testDTO里的參數(shù)從xx表查詢需要的數(shù)據(jù)
        // 第二步 根據(jù)查出來(lái)的數(shù)據(jù),去操作xx2表
        // 第三步 對(duì)前兩步的結(jié)果匯總,進(jìn)行xxx操作

        return 數(shù)據(jù)(直接返回即可,會(huì)自動(dòng)變成json);
    }
}

聲明一個(gè)API接口

@MarsApi
public interface TestApi {

    Object selectList(TestVO testVO);
}

將api與業(yè)務(wù)邏輯關(guān)聯(lián)

@MarsApi
public interface TestApi {

    @MarsReference(beanName = "testService",refName = "selectListForName")
    Object selectList(TestVO testVO);
}

對(duì),你沒(méi)看錯(cuò),API的方法和他引用的那個(gè)方法,參數(shù)列表可以不一樣, 框架會(huì)自動(dòng)把API的參數(shù)的值賦值到引用的那個(gè)方法的參數(shù)列表

引用的方法甚至可以無(wú)參,參數(shù)目前只支持自定義對(duì)象和Map

這套思想的核心是,把后端看作是一個(gè)獨(dú)立個(gè)體,并不是為服務(wù)前端而存在的, 后端就寫后端的業(yè)務(wù)邏輯好了,如果前端需要數(shù)據(jù),那我們就開(kāi)個(gè)門給他

這么做的好處,還可以散藕

通過(guò)更換MarsReference的配置,可以關(guān)聯(lián)到不同的業(yè)務(wù)邏輯
如果前端不需要這個(gè)接口了,直接無(wú)腦刪就好了,因?yàn)檫@只是一個(gè)抽象方法
后端專注業(yè)務(wù)邏輯就好了,不需要考慮跟前端互動(dòng),前端需要的時(shí)候開(kāi)個(gè)門就好了

還可以做什么

首先聲明式API是對(duì)前后端交互方式的一次變革,省去了Controller。

其實(shí)這種風(fēng)格在微服務(wù)里很常見(jiàn),比如Dubbo的api, 既然微服務(wù)接口可以用interface來(lái)提供對(duì)外的服務(wù),那么我們也可以把它用到http接口上吧。

除了聲明式API,我們還提供以下功能
* 單表操作和固定sql操作,僅需一行注解
* 分頁(yè)僅需調(diào)用一個(gè)方法,沒(méi)有任何第三方依賴
* 分布式鎖,只需要一行注解
* 沒(méi)有像Mybatis一樣的sqlMapper.xml
* 支持AOP,IOC,聲明式事務(wù)
* 搭建僅需三步,并提供官方中文文檔,再也不需要滿大街的搜Spring的機(jī)翻文檔或者個(gè)人博客了

分布式鎖示例

在要加鎖的方法上添加RedisLock注解

@RedisLock(key = "自己定義一個(gè)key")
public int insert(){
  return 1;
}

這個(gè)鎖會(huì)在事務(wù)開(kāi)啟之前獲取,在事務(wù)提交以后解鎖,并且只對(duì)MarsBean有效,對(duì)API和DAO無(wú)效

如果你不需要鎖住整個(gè)方法,只需要鎖一小段代碼,那么可以去我的官網(wǎng)查看相應(yīng)的方法

官網(wǎng):http://mars-framework.com/

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI