วันนั้นในสมาคมโปรแกรมเมอร์ มีคนถามไว้ว่า ใน mvc เอา business logic ไว้ที่ไหนดี หลายคนตอบ model หลายคนตอบ controller
.
.
ส่วนผมไปตอบไว้สั้นๆว่า mvc มันไม่แคร์ว่า business logic มาจากไหน เพราะมันอยู่นอก scope ของปัญหาที่มันพยายามแก้
.
.
.
มีคนไปตีความว่า เอาไว้ตรงไหนก็ได้ ซึ่งก็ยิ่งออกประเด็นไปไกลใหญ่
สิ่งที่พยายามสื่อแต่ล้มเหลว คือ ถ้าโลกของคุณมีแค่ฆ้อนคุณจะเห็นทุกอย่างเป็นตะปูไปหมด เช่นเดียวกัน ถ้าโลกของคุณมีแค่ mvc คุณก็จะเห็นทุกอย่างเป็น mvc ไปหมดจนปิดกั้นจินตนาการอื่นๆ
.
.
pattern มันขอ scope ตัวเองเฉพาะเรื่องการแสดงผล คุณจะไปเอา data มาจากไหนก็ได้ โยนให้ model มัน ที่เหลือมันจัดการให้
เราจะเอา logic ไปขียนไว้ใน hexagonal architecture ที่ pure มาก หรือจะเขียน logic ไว้ใน controller แบบไม่ต้องมี abstraction ใดๆ เลยก็ได้ หรือจะสร้าง rich domain model แล้วบอกว่า rich model นั่นแหละคือ presentation model เดียวกันใน mvc ก็แล้วแต่เลย
.
.
จะวาง architecture ยังไง มันขึ้นกับว่าคุณอยากสร้าง abstraction มากน้อยแค่ไหนเพื่อมาจัดการความซับซ้อนของ domain problem ของคุณเอง
.
.
.
อย่าเอา mvc เป็นตัวตั้ง แล้วหมุนตามมัน แต่ให้มันหมุนตามเรา ให้เราใช้มันเพราะเข้าใจ ไม่ใช่ให้มันมาใช้เราโดยเราไม่เข้าใจ