HomeArtTechHackBlockchain

Keychron K3 V2 Blue

By Khomkrid Lerdprasert
Published in Technology
July 07, 2021
1 min read
Keychron K3 V2 Blue

 จัด Mechanical Keyboard Keychron K3 V2 แบบ Blue มาเขียน Code กันแบบ Clean Code Architecture ตามลุง Uncle Bob กันดีกว่า

จากบทความก่อนหน้านี้ ที่เอา Go-Fiber มาดุ้ยๆๆๆ เขียนโค้ดแบบ ไม่รู้่สี่รู้แปดไป พบว่า อีเหี้ยยยย เขียน unit test ยากเหลือเกิน ห่าลากกกกกกกกกกก เลยรื้อใหม่ทั้งหมด แล้วไปวาง Project Layout ใหม่ เป็นแบบ Clean Code ตามลุง Bob พบว่าชีวิตดีขึ้นเวลาเขียน unit test ประกอบกับสั่ง Keyboard ใหม่มาเขียน Code ด้วย Code เลยเป็นระเบียบมากๆ โดยพระเอกของงานนี้ก็เจ้านี่เลย ไม่ได้ค่าโฆษณานะ แสรดดด

Keychron K3
Keychron

สั่งมาจากนี่เลย keychronthailand โดยอยากได้แบบส่ง ด่วน จี๋ๆ ก็ทำการ Add line ไปที่ https://lin.ee/12IAInJ

ทีแรกอยากได้ K4 แม่งหมด ห่านนนนน!!! ไม่เป็นไรกด K3 มาแทน packaging สวยสด งดงามคุ้มค่าทีเดียว

Keychron K3
Keychron

เมื่อเปิดกล่องออกมาจะเจอวิธีใช้งาน

Keychron K3
Keychron

Keychron K3
Keychron

และแถม key สำหรับเปลี่ยนถ้าใช้กับ windows มาให้แงะเปลี่ยนกันด้วย

Keychron K3
Keychron

Keychron K3
Keychron

มีฝาปิดกันฝุ่นมาให้อย่างดี เหมาะกับเวลาที่เขียน Code ไม่เสร็จ แล้วค่อยมาทำวันอื่นต่อ (ไม่เกี่ยว สัส)

Keychron K3
Keychron

Keychron K3
Keychron

เชรดดด เขร้ มีไฟด้วย ไม่เคยใช้ keyboard แบบมีไฟมาก่อนเลย อยากทำงานตอนกลางคืนแล้วเนี่ย ฮาๆๆๆๆๆ

พอแกะกล่องเสร็จก็ลงมือ เขียน code project ที่แล้วใหม่หมดเลย พบว่ามีอาการพิมพ์ผิดๆๅถูกๆอยู่บ้าง เพราะไม่ชินกับ keyboard layout

โดย Project ที่แล้วเนี่ย เราจะใช้ Go-Fiber แต่เราวางโครงสร้างแบบ มั่วชิบหายวายป่วง พอถึงคราวต้องมาเขียน Test ก็เลยงึดดิคร้าบบบบ

รอบนี้เราจะเอาใหม่ โดยเราจะทำการวางโครงสร้าง Project ทั้งหมดตามลุง Bob https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

https://blog.cleancoder.com/uncle-bob/images/2012-08-13-the-clean-architecture/CleanArchitecture.jpg

.
├── app.env
├── cmd
│   ├── go-dev.Dockerfile
│   ├── main.go
│   ├── main_test.go
│   └── tmp
│   ├── build-errors.log
│   └── main
├── config
│   ├── config.go
│   └── config_test.go
├── cover.html
├── cover.out
├── databases
│   ├── database.go
│   └── database_test.go
├── deliveries
│   ├── role_delivery.go
│   ├── role_delivery_test.go
│   ├── system_delivery.go
│   └── system_delivery_test.go
├── docs
│   ├── Install.http
│   ├── Login.http
│   └── User.http
├── domains
│   ├── module_domain.go
│   ├── role_domain.go
│   └── system_domain.go
├── go-dev.Dockerfile
├── go.mod
├── go.sum
├── helpers
│   ├── msg_helper.go
│   └── msg_helper_test.go
├── mocks
│   ├── ModuleRepository.go
│   ├── ModuleUseCase.go
│   ├── RoleRepository.go
│   ├── RoleUseCase.go
│   ├── SystemRepository.go
│   └── SystemUseCase.goบ
├── models
│   ├── model_test.go
│   ├── module_model.go
│   ├── permission_model.go
│   ├── role_model.go
│   ├── system_model.go
│   └── user_model.go
├── repositories
│   ├── module_repository.go
│   ├── module_repository_test.go
│   ├── role_repository.go
│   ├── role_repository_test.go
│   ├── system_repository.go
│   └── system_repository_test.go
├── routes
│   ├── installation_route.go
│   ├── installation_route_test.go
│   ├── role_route.go
│   ├── role_route_test.go
│   └── route.go
└── usecases
├── module_usecase.go
├── module_usecase_test.go
├── role_usecase.go
├── role_usecase_test.go
├── system_usecase.go
└── system_usecase_test.go

โดยทดลองวางโครงสร้างใหม่ตาม layout ข้างบนดูซึ่งจะไม่ตรงกับ concept ของลุงซะทีเดียว เอาสะดวกผมเข้าว่า

โดย

  1. cmd จะใช้เก็บ file main.go
  2. config ใช้เก็บ viper config
  3. database ใช้เก็บ database connection
  4. deliveries ใช้เก็บส่วนที่ เขียนร่วมกับ Go-Fiber เพืื่อโยนไปให้ Routing
  5. docs  ใช้เก็บ Rest Client เพื่อทดสอบ api และไว้ใช้แทน Swagger
  6. domains  เก็บ interface ของ module ต่างๆของเรา
  7. helpers  เก็บ module ต่างๆที่เขียนไว้ใช้ร่วมกัน
  8. mocks  เอาไว้เก็บไฟล์ mock interface  ที่ถูก generate จาก mockery
  9. models  เก็บไฟล์จำพวก model struct ต่างๆ
  10. repositories  ไฟล์ที่ติดต่อไปยัง database เพื่อจัดการ query ต่างๆ
  11. routes เก็บไฟล์ route ต่างๆในระบบ
  12. usecases ใช้จัดการ bussiness logic ต่างๆ

พอทำการแยก layout ออกมาตามนี้แล้ว ทำให้สามารถเขียน unit test ให้ coverage ได้เกือบๆ 100% เลยทีเดียว

go test -coverprofile cover.out ./... && go tool cover -html=cover.out -o cover.html  ✔  1010714:46:57
ok github.com/aofiee/barroth/cmd 1.709s coverage: 45.8% of statements
ok github.com/aofiee/barroth/config 0.870s coverage: 100.0% of statements
ok github.com/aofiee/barroth/databases 1.195s coverage: 100.0% of statements
ok github.com/aofiee/barroth/deliveries 2.323s coverage: 50.0% of statements
? github.com/aofiee/barroth/domains [no test files]
ok github.com/aofiee/barroth/helpers 1.417s coverage: 100.0% of statements
? github.com/aofiee/barroth/mocks [no test files]
ok github.com/aofiee/barroth/models 0.574s coverage: 100.0% of statements
ok github.com/aofiee/barroth/repositories 2.041s coverage: 100.0% of statements
ok github.com/aofiee/barroth/routes 2.483s coverage: 96.3% of statements
ok github.com/aofiee/barroth/usecases 2.621s coverage: 100.0% of statements

เหมือนเดิม code ทั้งหมดที่ทดลองเขียน จะอยู่ที่ https://github.com/aofiee/golang-clean-architecture


Tags

#keyboard

Share

Previous Article
บันทึก การทำ Go fiber JWT Accesstoken & Refreshtoken ลงบน Redis
Khomkrid Lerdprasert

Khomkrid Lerdprasert

Full Stack Life

Related Posts

สร้าง Key pair เพื่อทำการ signing document signature ด้วย Go lang
March 13, 2024
1 min
© 2024, All Rights Reserved.
Powered By

Quick Links

Author

Social Media