首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关注点与可用性的分离

关注点与可用性的分离
EN

Stack Overflow用户
提问于 2017-05-30 08:55:45
回答 2查看 717关注 0票数 0

我一直在努力保持go模块整洁地分开,并避免循环依赖。

现在我有这样的代码:

代码语言:javascript
复制
    package chain


type Block struct{
    Content []byte
    Number int
}

var Chain []Block = make([]Block, 10)

func AddBlockToChain(block Block){
    // do some checks
    //...
    // add to chain
    Chain[block.Number] = block
}

func GetBlock(number int) Block {
    // do some checks
    //  ...
    // get from chain
    return Chain[number]
}

为了达成共识,我需要一些额外的信息块。根据我使用的协商一致算法,信息可能是不同的。我希望协商一致的算法是可互换的(例如,在启动时使用标志)。

将信息作为字段存储在块中是很方便的,因此当我调用GetBlock(3)或从其他任何地方获取块时,我不仅可以访问该块,而且还可以了解该块目前的协商一致状态。

另一方面,我希望将只与某个协商一致算法相关的数据与基本块数据分离--甚至在一个单独的包中。

我该如何设计我的程序?我应该在哪里保存数据与某个协商一致算法相关?

一些背景信息:

我正试图从头开始构建一个块链应用程序。我有一个“链”模块,负责存储数据块,还有一个“共识”模块,负责在多个对等点之间创建共识,运行我的程序中关于数据是什么的实例。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-30 09:08:19

consensus.Blockchain.Block是两种不同的类型,但是由于要将chain.Block嵌入到consensus.Block中,所以可以从另一种访问。

只需在consensus.Block中传递AddBlockToChain()

代码语言:javascript
复制
`func AddBlockToChain(block consensus.Block)`

然后通过:block.Block访问它

示例:

代码语言:javascript
复制
package main

import "fmt"

type ChainBlock struct {
    id int
}

type ConsensusBlock struct {
    ChainBlock
    idCons int
}

func printChainBlockId(consBlock ConsensusBlock) {
    fmt.Println(consBlock.ChainBlock.id)
}

func main() {
    test := ConsensusBlock{
        ChainBlock: ChainBlock{
            id: 42,
        },
        idCons: 44,
    }

    printChainBlockId(admin)
}
票数 3
EN

Stack Overflow用户

发布于 2017-06-06 12:48:17

为了完整起见,我想添加一个解决方案,将协商一致算法的代码和数据保存在与块和链码不同的包中:

在块中添加一个额外的字段,如下所示:

代码语言:javascript
复制
Extra []byte

然后,将协商一致算法所需的额外数据保存在结构中,并将其编码为json或其他格式,以便将其存储在额外的字段中。

这个解决方案将不同的关注点分开。如果没有协商一致的算法,这条链就没有意义,但它们看起来可能非常不同,可能需要不同的数据。这样,不同的算法可以存储不同的数据。

但是,我没有使用这个解决方案,因为正如@syntagma所建议的那样,将所有代码保存在一个包中似乎更简单。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44257729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档