GoCloud using Builder pattern to improve user experience
In order to improve user experience using gocloud, I opened Issue #78.
In GoCloud, existing way to receive user parameters:
alicloud, _ := gocloud.CloudProvider(gocloud.Aliprovider)
create := map[string]interface{}{
"RegionId": "cn-qingdao",
"ImageId": "centos_7_04_64_20G_alibase_201701015.vhd",
"InstanceType": "ecs.xn4.small",
"SecurityGroupId": "sg-m5egbo9s5xb21kpu6nk2",
}
resp, err := alicloud.Createnode(create)
In the current way, we cannot prevent user from entering wrong parameter name and missing required parameters.
If we use Builder pattern like this:
alicloud, _ := gocloud.CloudProvider(gocloud.Aliprovider)
createNodeBuilder := ecs.NewCreateNodeBuilder().
RegionID("cn-qingdao").
ImageID("centos_7_04_64_20G_alibase_201701015.vhd").
InstanceType("ecs.xn4.small").
SecurityGroupID("sg-m5egbo9s5xb21kpu6nk2")
createNode, err := createNodeBuilder.Build()
if err != nil {
// May miss required parameters
}
resp, err := alicloud.Createnode(createNode)
We can
- Prevent user from inputting wrong parameter name
- Throw an error when user miss input required parameters
- Let user add parameters in different places
- Let user have higher freedom, clearer code
So I tried to use Builder pattern in GoCloud.
I made it and created Pull Request #80:
- Implemented Builder pattern for create node of Ali-cloud
- Unit test for create node of Ali-cloud