lad梯形图编程顺序_重新思考编程:再次使顺序图更酷
lad梯形圖編程順序
介紹
Ballerina語言是圍繞順序圖的概念設計的。 與使用聲明性語言相比,這最初是作為定義集成流的更好方法而存在的。 聲明性語言(例如,基于XML和YAML的語言)通常可用于定義基于數據流的技術。 但是,當我們的操作和邏輯的復雜性增加時,它們變得越來越難以管理。 這是當我們開始轉向自定義擴展時,例如成熟的編程語言擴展(如Java)或帶有JavaScript的腳本選項來填補功能空白。
我們需要一種能夠兼顧兩者的技術。 它需要具有通用編程語言所具有的靈活性,同時還具有基于高層抽象對解決方案進行建模的功能。 特別是在當前的云時代,我們需要能夠以對開發人員更友好的方式對分布式系統進行建模的技術。 在這些類型的動態環境中,我們需要處理具有多個角色,并發執行流和遠程端點的軟件系統。
用例:銀行ATM操作
讓我們看一下一種情況,在這種情況下,我們需要設計一個由多個參與者組成的軟件系統,每個參與者代表系統的某種功能。 對于單個用例,我們需要對顯示所有參與者如何參與的流程進行建模。 對于我們而言,最自然的表示方法是使用序列圖。 圖1顯示了對銀行ATM現金提取操作的功能進行建模的方案。
圖1:銀行ATM取款順序圖
“客戶”是觸發系統參與者之間交互的外部參與者。 ATM服務將是一種網絡服務,它接收來自客戶端的請求并連接到核心銀行系統,而核心銀行系統又與數據庫交互以存儲和檢索帳戶信息。
讓我們看一下如何在Ballerina編程語言中使用這種方法。 在這里,我們將使用代碼優先的方法定義執行流程,并且由于語法與序列圖構造完全兼容,因此我們可以自動可視化以序列圖形式編寫的代碼。
芭蕾舞演員之路
可以使用Ballerina在代碼中實現上述ATM操作方案,如圖2所示。
圖2:VS代碼中的BallerinaATM服務代碼
上面的代碼只是最終代碼的框架,沒有實現完整的業務邏輯。 您可能已經注意到,我們已將VS Code與Ballerina插件一起使用 。
在右上角,有“顯示文件概述”選項,單擊該選項可打開以下面板。
圖3:VS代碼中可視化的BallerinaATM服務模型
上圖顯示了從我們之前實現的框架代碼生成的序列圖。 入口點是服務資源功能。 參與者顯示為“呼叫者”,代表正在調用服務資源的客戶。 “默認”參與者是資源功能本身,顯示其生命線中的操作。 從資源函數開始,其生命線中將顯示更多函數調用,例如checkBalance()和debitAccount()調用,并且它們的內部操作被進一步擴展并合并到同一序列圖中以顯示其操作。
客戶端對象和遠程方法
在這些部分中,我們可以看到序列圖中的另一個參與者“ accountDB”,它表示我們正在與之交互的數據庫。 在Ballerina中,這些是特殊的網絡客戶端對象,它們具有自己的生命線來表示其功能以及它可以接收的消息。 發送到這些網絡客戶端的消息或對其進行的調用稱為遠程方法。 遠程方法是客戶端對象內部的一種特殊方法,代表通過網絡進行的呼叫。 正常方法調用和遠程調用之間的區別是通過使用箭頭“->”符號來調用遠程方法來區分的。
例如,在我們之前的示例中,以下行表示在數據庫客戶端上完成的客戶端操作調用,以檢索數據庫記錄。
var selectRet = check accountsDB->select( "SELECT balance FROM Account WHERE id = ?" ,Account, id);之前我們談到“調用者”是調用我們服務資源的參與者。 這實際上是我們資源方法的第一個參數的名稱,它也恰好是表示我們服務資源的調用方的客戶端對象。 以下代碼顯示了資源函數定義的聲明。
resourcefunction withdrawMoney ( http:Caller caller, http:Request request,string id, decimal val )?returns @ tainted error ?類型為http:Caller的調用者實例是Ballerina中的一個客戶端對象,資源創建者可以通過調用其遠程方法來使用它與調用者進行通訊。 通過使用此模型,我們可以輕松實現消息傳遞模式,例如雙向通信,并與調用方進行多次交互,而不僅僅是在資源方法定義的末尾將結果返回給調用方。 下面的行顯示了我們如何使用調用者實例來響應客戶端。
var result = check caller->respond( "Fail: no funds" );這里的結果表示從調用方檢索到的響應,例如,如果有錯誤傳回給調用方,我們可以在資源方法中執行進一步的操作,而不必忽略它。 這種模式鼓勵采用更健壯的方法來處理錯誤。
并發
Ballerina的并發模型是使用鏈的概念構建的。 線束是輕量級線程,其中單個操作系統線程可以包含多個線束。 單個線程在線程中一次運行,并且屬于單個線程的線程協同執行多任務。 這對在Ballerina中實現非阻塞I / O操作特別有益,在該狀態中,子線程允許我們優化CPU時間的使用。
工人是我們在Ballerina中用來表示函數中單鏈執行的構造。 一個函數可以有多個工作程序,以便在函數中定義并發操作。 下面的圖4中顯示的功能是對我們之前的場景的更新,在該場景中,我們執行了一些操作來啟動系統。
圖4:VS代碼中的BallerinaATM服務啟動代碼
在代碼中,我們正在聯系幾個網絡端點,檢索信息并最后報告某些狀態。 網絡操作與執行某些計算所需的一些計算代碼混合在一起。 即使我們的initSystem函數將在單個線程中運行,也可以通過內部使用strands對執行進行優化。 當I / O操作通過HTTP網絡調用進行時,用戶空間調度程序將已將線程的物理執行切換到其他工作程序來完成處理。
讓我們看一下如何在序列圖視圖中可視化Ballerina的并發執行。 initSystem函數的圖表視圖如下圖5所示。
圖5:VS代碼中可視化的BallerinaATM服務啟動模型
在這里,我們可以看到工作程序已經成為HTTP客戶端旁邊序列圖的參與者。 工人在其生命線中看到的激活是同時發生的,并且工人之間的任何通信都是通過消息傳遞,使用Ballerina的send(->)和receive(<-)動作完成的。 另外,在工作程序之間的消息傳遞場景期間,編譯器會進行顯式檢查,以驗證發送和接收操作是否處于一致狀態,以避免運行時出現任何死鎖場景。
通過這種方式,我們可以輕松地對并發執行及其通信通道建模,并使用順序圖方便地對其進行可視化。 這種編程方法為我們編寫的代碼提供了自我說明,并總體上提高了生產率。
摘要
我們已經看到了Ballerina是如何設計的,始終可以以有意義的方式生成程序表示形式的序列圖。 在針對網絡客戶端,偵聽器,并發結構,消息解析和許多其他方面的語言特殊結構中可以看到這種行為。
可以在此處訪問示例場景中使用的框架代碼。 有關Ballerina的更多信息,請參閱Ballerina學習頁面。 您可以在我們的Slack頻道或Google小組中參與用戶和開發討論。
翻譯自: https://hackernoon.com/rethinking-programming-making-sequence-diagrams-cool-again-6z1p3yv9
lad梯形圖編程順序
總結
以上是生活随笔為你收集整理的lad梯形图编程顺序_重新思考编程:再次使顺序图更酷的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机芯片制造原理,从沙粒到芯片,原来C
- 下一篇: Vue实现放大镜