Builder pattern dipakai untuk membuat sebuah instance dari sebuah struct
-- beserta dengan semua propertinya.
Perhatikan struct
berikut:
package main
type User struct {
name string
email string
address string
dateOfBirth DateOfBirth
}
package main
type DateOfBirth struct {
year int
month int
day int
}
Implementasi pattern
package main
import (
"fmt"
"strconv"
"strings"
)
func newUserBuilder() *User {
return &User{}
}
func (u *User) Build() (User, error) {
return User{
name: u.name,
email: u.email,
address: u.address,
dateOfBirth: u.dateOfBirth,
}, nil
}
func (u *User) SetName(name string) {
u.name = name
}
func (u *User) SetEmail(email string) {
u.email = email
}
func (u *User) SetAddress(address string) {
u.address = address
}
func (u *User) SetDateOfBirth(dob string) {
splitted := strings.Split(dob, "/")
day, err := strconv.Atoi(splitted[0])
if err != nil {
u.dateOfBirth = DateOfBirth{}
}
month, err := strconv.Atoi(splitted[1])
if err != nil {
u.dateOfBirth = DateOfBirth{}
}
year, err := strconv.Atoi(splitted[2])
if err != nil {
u.dateOfBirth = DateOfBirth{}
}
u.dateOfBirth = DateOfBirth{day, month, year}
}
Bahkan, kalau mau, kamu dapat menambahkan validasi pada setiap variabel yang akan menjadi input -- sebelum ia dipakai oleh setiap properti dari sebuah struct
.
Cara penggunaan
package main
func main() {
builder := newUserBuilder()
builder.SetName("agus")
builder.SetAddress("cirebon")
builder.SetEmail("agus@email.com")
builder.SetDateOfBirth("01/01/2020")
user, err := builder.Build()
if err != nil {
fmt.Println(err)
return
}
fmt.Println(user)
}
Kesimpulan
Dengan builder pattern
kita dapat membuat instance dari sebuah struct dan menambahkan validasi pada variabel-variabel yang akan menjadi input-nya.
Top comments (0)