ช่วงนี้ผมกำลังพยายามทำ example repo ให้น้องๆในที่ทำงานดูเป็นตัวอย่าง โดยแนวคิดแรกเลยก็คือ simplify
แต่การจะ simplify สำหรับคนบางกลุ่ม มันจะยากมาก ก.ไก่หลายตัว เพราะมันจะขัดความรู้สึกเขา และเขารู้สึกว่า การทำแบบนั้นมันบาป ผิดศีลทุกข้อที่เคยปฏิบัติมาอย่างเคร่งครัด
ผมรู้ได้ไง ก็เพราะคำถามที่เขาตั้ง หลายๆคน หลายๆครั้ง จะตั้งคำถามคล้ายๆกันเช่น
พี่ครับ แล้ว repository ผมจะเขียนยังไง
พี่ครับ repository ผมจะวางไว้ตรงไหน
พี่ครับ ถ้ามี service 2 ตัวผมจะสร้าง interface ยังไง
พี่ครับ ถ้าผมเขียนแบบนี้แล้ว ชั้นของ adapter ผมจะเอาไปวางไว้ที่ไหน
คำถามพวกนี้มันทำให้ผมรู้สึกถึงความเจ็บปวดของเขาได้จริงๆ ผมไม่รู้จะตอบเขายังไงดีว่า ลูกเอ้ย เราไม่ได้อยู่กับพระเจ้าแล้วนะลูก ตอนนี้เราขายวิญญาณให้ซาตานเป็นที่เรียบร้อยแล้ว และตอนนี้เจ้ากำลังอยู่ในนรกนะงี้
ผมยกตัวอย่าง handler มาให้ดูสักตัวหนึ่ง
func (handler *B2CHandler) Order(c *gin.Context) {
var req B2C
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, app.Response{
Message: err.Error(),
})
return
}
if err := handler.payment.MakeOrder(); err != nil {
c.JSON(http.StatusInternalServerError, app.Response{
Code: 5001,
Message: err.Error(),
})
return
}
c.JSON(http.StatusOK, app.Response{
Data: Response{},
})
}
ตัวอย่างนี้เป็นตัวอย่างสมมุตินะครับ มันไม่สมบูรณ์ โดยในนี้มีเรียก payment interface อยู่ตัวหนึ่ง ซึ่งผมเขียนทุกอย่างอยู่ใน pacakge เดียวกัน
ครับ มาถึงตรงนี้ คนที่รู้สึกว่าบาป ก็จะเห็นแล้ว ส่วนคนที่ไม่รู้สึกอะไร เรามากอดคอกัน 555
ความรู้สึกบาปนี้ ผมบอกได้แค่ว่า เราจะต้องวางสิ่งที่ทำให้เรารู้สึกบาปไว้ข้างๆตัวก่อน ไว้เขียน Go จบแล้ว เวลาจะไปเขียนภาษาอื่นค่อยเอามาสวมไว้เหมือนเดิม มันจะพอช่วยเราได้บ้าง อย่าไปเครียด เดี๋ยวมันจะดีเอง
มันจะไม่มีคำที่เราคุ้นๆเช่น service, repository, model และผองเพื่อนอยู่ในนี้เลย ซึ่งผมจะบอกให้ว่า มันทำงานได้นะ ไม่ต้องมีคำพวกนั้นมันก็ทำงานได้ ขอให้มั่นใจในสิ่งที่เขียน ไม่ต้องมีสิ่งศักสิทธิ์เหล่านั้นมันก็อยู่ได้ครับจริงๆ
Top comments (0)