摘要:在上周周記的結(jié)尾,我曾經(jīng)說過本周要介紹的開發(fā)和應(yīng)用。可在通讀完的文檔之后,我立即取消了原定計(jì)劃,直接介紹。讓其成為開發(fā)首選的理由只有一個(gè)對(duì)開發(fā)者友好。將發(fā)布到的暴露成,供外部調(diào)用,完全語言中立。而后者則是為測(cè)試而生的。
在上周周記的結(jié)尾,我曾經(jīng)說過本周要介紹Fabric的開發(fā)和應(yīng)用。按照最開始的寫作計(jì)劃,我打算講講兩種開發(fā)模式:直接使用Fabric API和利用Composer框架。可在通讀完Composer的文檔之后,我立即取消了原定計(jì)劃,直接介紹Composer。
選擇工具A而不是B一般情況下理由都很直接:簡(jiǎn)單易上手。以我個(gè)人為例,在翻完Fabric的文檔之后,雖然對(duì)于Fabric的架構(gòu)和組件了然于胸,但對(duì)于如何開發(fā),其實(shí)還是很模糊的。
為什么會(huì)這樣?
有兩個(gè)原因:
文檔本身給出的開發(fā)范例(fabric-samples)缺乏一個(gè)系統(tǒng)性的介紹。所謂系統(tǒng)性,說白了就是教科書性質(zhì)的介紹,由一個(gè)簡(jiǎn)單的例子開始,層層遞進(jìn),最終讓讀者全盤掌握。就當(dāng)前的文檔來說,這一任務(wù)顯然沒有達(dá)到。
缺乏聚焦,正如這篇Composer幻燈片(第四頁)介紹的,有太多東西要操心了,對(duì)于真正需要關(guān)心的東西(業(yè)務(wù)邏輯)反而沒有突出。
Composer恰好非常好的彌補(bǔ)了Fabric文檔中這兩個(gè)缺陷,從其文檔構(gòu)成可以很明顯的看出來:
給出Composer的整體性介紹
手把手教會(huì)大家如何完成安裝
給出一個(gè)Hello World級(jí)別的例子
如何進(jìn)行單元測(cè)試
如何部署到真實(shí)的Fabric環(huán)境
這種方式是我最喜歡的,對(duì)于開發(fā)者來講,他能很快建立起整體印象,并且樹立起信心。
當(dāng)然,文檔好并不足以吸引開發(fā)者成為粉絲。讓其成為開發(fā)首選的理由只有一個(gè):對(duì)開發(fā)者友好。
Composer的開發(fā)者友好性表現(xiàn)在以下幾個(gè)方面。
1. 良好的抽象
Chaincode是Fabric開發(fā)的核心,但看過了例子之后,說真的,很容易讓開發(fā)者打退堂鼓。因?yàn)樘讓恿耍∽屓擞幸环N回到用Servlet開發(fā)Java Web應(yīng)用的感覺。
Composer在這一點(diǎn)上做得很好,它的Runtime內(nèi)置了通用的Chaincode。使用它開發(fā)根本不會(huì)感到Chaincode的存在。而且整個(gè)過程幾乎跟你開發(fā)一個(gè)普通的CRUD Web應(yīng)用無異!在開發(fā)者看來,他就是在寫普通的JavaScript函數(shù)。
這篇文章給出了兩種方式(Chaincode和Composer)的開發(fā)范例,在結(jié)尾處提到兩者的代碼行差異:
This ±10x reduction in the number of lines of code when Go and Composer solutions are compared is fairly consistent across several samples.
2. 統(tǒng)一的工程化體驗(yàn)
實(shí)際的開發(fā)不是書上的簡(jiǎn)單例子,而且涉及多人,如果沒有良好的開發(fā)規(guī)范,很難產(chǎn)生好的結(jié)果。從Fabric文檔中,你無法看出一個(gè)區(qū)塊鏈應(yīng)用的項(xiàng)目工程應(yīng)該是什么樣子,只能看到一個(gè)個(gè)零散的代碼文件。顯然無法滿足工程上的要求。
就一個(gè)Fabric區(qū)塊鏈項(xiàng)目來講,它包含:
存儲(chǔ)于賬本上的Asset
操作Asset的Chaincode
訪問Chaincode的Client App
應(yīng)用相關(guān)的權(quán)限和成員
Composer非常完美地給出了解決方案,將整個(gè)開發(fā)過程分成3部分,每一部分都有對(duì)應(yīng)的命令行工具,提供統(tǒng)一的開發(fā)體驗(yàn):
Business Network,業(yè)務(wù)邏輯,其中包括以下組件:
asset model,存儲(chǔ)于賬本上的Asset,其過程跟設(shè)計(jì)數(shù)據(jù)庫的表沒什么兩樣。
transaction function,對(duì)應(yīng)Chaincode中的各個(gè)方法,但對(duì)于開發(fā)者來講完全透明。
acl文件,權(quán)限定義。
query,命名查詢,供transaction function調(diào)用。
Rest Server
將發(fā)布到Fabric的Business Network暴露成Restful API,供外部調(diào)用,完全語言中立。
Client App
嚴(yán)格來講,這一步并非必要,因?yàn)榧热簧厦嬉呀?jīng)有了語言中立的API,理論上可以用任何框架來開發(fā)相應(yīng)的Client APP。但Composer提供了一個(gè)基于Angular的模板幫助加速這一過程。
怎么樣,這個(gè)過程是不是非常眼熟?通過開發(fā)框架固化的開發(fā)過程可以讓開發(fā)人員更快的上手,并且統(tǒng)一在相同的“big picture”之下。并且,上述的各個(gè)組件對(duì)于有經(jīng)驗(yàn)的開發(fā)者并不陌生,有助于快速理解。
大家可以在文檔中的這個(gè)例子中看到完整的過程。
3. 內(nèi)建測(cè)試的支持
即便是水平再爛的開發(fā),他也希望能驗(yàn)證一下自己寫的東西才好意思交出去。然而,對(duì)于Fabric應(yīng)用來講,這可不是件容易的事情,因?yàn)椴渴鹛爆嵙恕?/p>
Composer再次拯救了開發(fā)!
Composer內(nèi)置的runtime為測(cè)試提供了良好的支持,由于良好的抽象,這個(gè)runtime既可以是實(shí)際的Fabric,也可以是一個(gè)內(nèi)置的Node.js進(jìn)程。而后者則是為測(cè)試而生的。更好的是,這一切完全對(duì)開發(fā)者透明,開發(fā)的上層代碼完全不需要改動(dòng)。
對(duì)于上進(jìn)心更強(qiáng),想要實(shí)現(xiàn)自動(dòng)化測(cè)試的同學(xué),這里有一個(gè)例子可以參考。
4. 便捷的CLI工具
相比起Fabric零散的命令集合,Composer提供了便捷的CLI,統(tǒng)一了開發(fā)、管理和運(yùn)營(yíng)任務(wù)。開發(fā)者可以利用它方便的實(shí)現(xiàn):
應(yīng)用打包和部署
應(yīng)用腳手架生成
環(huán)境管理
讓開發(fā)更加聚焦于手頭的任務(wù),而不是為了準(zhǔn)備工作而分散太多精力。
前面說了Composer的那么多好處,接下來說說Composer的局限性。就目前的文檔來看,我沒有看到如何用它來開發(fā)System Chaincode的例子。而且,我懷疑當(dāng)前的版本并不支持。因此,假如你像要開發(fā)的System Chaincode,Composer可能并不能滿足你的需要。而這一任務(wù)應(yīng)該算不上一個(gè)大眾型任務(wù)。
或許你會(huì)奇怪,為什么我沒有展示一個(gè)實(shí)際的例子來證明我說的這些好處。這只能怪Composer的文檔寫得太好了,基本是傻瓜式教程,按照它的步驟,基本不會(huì)出現(xiàn)什么問題。既然是這樣,干嘛還要花時(shí)間在這個(gè)上面呢?
說到底,本文的目的只有一個(gè):用Composer來開發(fā)未來的Fabric應(yīng)用,不要再自虐了!同時(shí),最新一期的Thoughtworks雷達(dá)也將其列為“TRIAL”并給出了下面的評(píng)語:
... However, the programming abstraction of chaincode is relatively low level given it manipulates the state of the ledger directly. Moreover, it always takes a lot of time to set up infrastructure before writing the first line of blockchain code. Hyperledger Composer, which builds on top of Fabric, accelerates the process of turning ideas into software. Composer provides DSLs to model business assets, define access control and build a business network. By using Composer you could quickly validate your idea through a browser without setting up any infrastructure.
最后,請(qǐng)大家記住:即使Composer降低了開發(fā)的門檻,但還是要記得認(rèn)真學(xué)習(xí)Fabric文檔喲!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/24124.html
摘要:作為系列的新篇章,我選擇從超級(jí)賬本的開始。為什么選擇超級(jí)賬本作為起點(diǎn)我在之前的文章中曾說過會(huì)從超級(jí)賬本入手開始區(qū)塊鏈的學(xué)習(xí)和實(shí)踐,同時(shí)也給出了個(gè)人的理由。檢查事務(wù)提議的響應(yīng)。為了降低區(qū)塊鏈應(yīng)用的開發(fā)難度,超級(jí)賬本項(xiàng)目又引入了。 本著以教帶學(xué),Learning by Doing的想法,我于上周加入了Bob組織的HiBlock區(qū)塊鏈技術(shù)布道群。這個(gè)群可不太好混,群規(guī)要求每個(gè)成員必需每周有輸...
摘要:資產(chǎn)在中表示為鍵值對(duì)的集合,狀態(tài)更改記錄為通道分類帳上的交易,資產(chǎn)可以用二進(jìn)制和或格式表示。分類帳由區(qū)塊鏈鏈組成,用于以塊的形式存儲(chǔ)不可變的順序記錄,以及用于維護(hù)當(dāng)前狀態(tài)的狀態(tài)數(shù)據(jù)庫。 Hyperledger Fabric模型 本節(jié)概述了編入Hyperledger Fabric的關(guān)鍵設(shè)計(jì)特性,實(shí)現(xiàn)了對(duì)全面但可定制的企業(yè)區(qū)塊鏈解決方案的承諾: 資產(chǎn) - 資產(chǎn)定義為可以通過網(wǎng)絡(luò)交換幾乎任...
摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接聯(lián)盟鏈初識(shí)以及環(huán)境搭建流程原文已更新,請(qǐng)讀者前往原文閱讀這篇文章首先簡(jiǎn)單介紹了聯(lián)盟鏈?zhǔn)鞘裁矗僭敿?xì)的介紹了環(huán)境搭建的整個(gè)流程。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:聯(lián)盟鏈初識(shí)以及Fabric環(huán)境搭建流程原文已更新,請(qǐng)讀者前往原文閱讀 這篇文章首先簡(jiǎn)單介紹了聯(lián)盟鏈?zhǔn)鞘裁矗僭敿?xì)的介紹了Fabric環(huán)境搭建的整個(gè)流程。 區(qū)塊鏈分類: 以參與方式分類,區(qū)...
摘要:目的因最熟悉故最后還是拿做突破口學(xué)習(xí)本文只運(yùn)行功能以后具體在分析運(yùn)行環(huán)境網(wǎng)絡(luò)遠(yuǎn)程本地遠(yuǎn)程下載運(yùn)行網(wǎng)絡(luò)核查網(wǎng)絡(luò)是否啟動(dòng)成功這一步我遇到的問題是未啟動(dòng)成功原因在于中這 目的 因最熟悉java,故最后還是拿java做突破口學(xué)習(xí)sdk,本文只運(yùn)行demo,sdk功能以后具體在分析. 運(yùn)行環(huán)境 Fabric網(wǎng)絡(luò) 遠(yuǎn)程Centos Fabric-sdk-java 本地MacOs Intellij...
摘要:企業(yè)區(qū)塊鏈平臺(tái)企業(yè)級(jí)許可的分布式分類賬平臺(tái),為廣泛的行業(yè)用例提供模塊化和多功能性。這些節(jié)點(diǎn)通過應(yīng)用已經(jīng)由共識(shí)協(xié)議驗(yàn)證的交易來維護(hù)分類帳的副本,該交易被分組為包括將每個(gè)塊綁定到前一個(gè)塊的散列的塊中。 企業(yè)區(qū)塊鏈平臺(tái) 企業(yè)級(jí)許可的分布式分類賬平臺(tái),為廣泛的行業(yè)用例提供模塊化和多功能性。 介紹 一般而言,區(qū)塊鏈?zhǔn)且粋€(gè)不可變的交易分類賬,維護(hù)在一個(gè)分布式對(duì)等節(jié)點(diǎn)網(wǎng)絡(luò)中。這些節(jié)點(diǎn)通過應(yīng)用已經(jīng)由共...
閱讀 2579·2023-04-26 03:00
閱讀 1392·2021-10-12 10:12
閱讀 4190·2021-09-22 15:33
閱讀 2908·2021-09-22 15:06
閱讀 1530·2019-08-30 15:44
閱讀 2145·2019-08-30 13:59
閱讀 534·2019-08-30 11:24
閱讀 2407·2019-08-29 17:07