使用MVC模式实现区块链开发

18-10-07 banq
              

Convector是一个开源的区块链Javascript框架,目的通过抽象技术的复杂性来降低区块链使用障碍。下文是他们引入MVC模式的设计思想:

当我们在设计Convector,我们想达到的基本目标之一是使开发人员与blockchain互动尽可能顺利。

目前大多数用于区块链开发的语言和库都使用了很多复杂的术语,区块链开发人员的心智经常被底层区块链技术打扰,区块链开发人员应该关注应用程序逻辑而不是其背后的技术。

今天,区块链开发已经不需要数据库专家了。明天,区块链开发也不需要专门的区块链专家。

- 沃尔特蒙特斯

原因是:区块链是一种数据存储,大多数时间都受到一组预定义规则的保护,这些规则通常称为智能合约或链代码。

这就是为什么在Convector中我们为框架的核心原则选择一个熟悉的术语,这个术语就是应用开发领域中最成功的模式之一:MVC(模式 - 视图 - 控制器),它基本上包含一个描述数据的模型和一个控制器。

因此,假设你想创建自己的加密货币。其模型的属性将是:名称,符号,总供应,余额,创建者等。它的控制器符合以下方法:转移,批准,从哪里移出,mint等。如果你是一个技术娴熟的人,你已经意识到这些都是以太坊标准ERC-20的概念。

我们已经有了一个非常可靠的模型来说明如何轻松地塑造智能合约。但是,当我们迁移内部应用程序的合同时,我们意识到,如果我们想要使区块链开发变得非常简单,我们不仅要使得创建变得直接方便,还要使其使用变得方便。

我们发现自己编写了后端和UI服务,重复了调用智能合约的方法。这不好 :(

我们提出了一个想法,即采用我们已经为智能合约层创建的相同控制器和模型,并将它们转移到所有其他层,如服务器或浏览器,这样我们就可以自信地执行一行代码,Token.transfer(100, '0x165DE7FA3E5')

无论我们是否在浏览器、服务器或区块链等不同上下文中,这一条语句会足够聪明,它会采取必要的步骤来执行区块链交易事务。

因此,我们需要一种方法用于与区块链通信的逻辑,可根据环境上下文的不同而改变。在浏览器中不用安装区块链数据库,你所做的只是直接调用区块链API的HTTP方法。

控制器需要一个适配器来解析它们对模型执行的操作。在浏览器中,这可能会触发对后端的HTTP调用。在后端,这可能会触发对区块链的HTTP调用。在区块链本身,它实际上执行验证交易的步骤,即:交易作者可以转移这些代币吗?

模型需要一个可以执行CRUD操作的存储层。同样,在浏览器中,这可能是向区块链发送查询事务或向后端发送HTTP请求。在后端,可以从生成的数据库中读取或查询区块链。在区块链中,这可能是搜索区块的信息。

好处:

1. 互操作性。在不久的将来,你将定期在同一个应用程序上连接多个区块链,就像现在使用不同的API一样。能够在同一框架内与多个区块链交谈是我们的目标。现在,Convector正式支持Hyperledger Fabric,但这只是我们想要支持的多个区块链平台中的第一个。

2. 超越智能合约。区块链应用程序最常见的方案之一是与现有数据源(如API和数据库)集成。由于适配器/存储机制允许我们指定与Controller / Model实现分离的通信协议,因此可以很容易地区分您想要路由到区块链的逻辑操作以及在其他系统上处理的操作。

Taking the MVC Pattern to the Blockchain Developme