เนื่องจากต้องทำการแนะนำและวางโครงสร้างระบบงานที่พัฒนาด้วยภาษา Java
โดยสิ่งที่ต้องการคือ ระบบ REST APIs ง่าย ๆ
ซึ่งทางเลือกในภาษา Java ก็มีมากมายทั้ง
- Servlet 3
- JAX-RS
- Jersey
- Spring MVC
- Spring Boot
- Drop Wizard
แต่ในระบบนี้ผมเลือกที่จะเสนอและแนะนำ Spring Boot
เนื่องจากช่วยทำให้เราเริ่มต้นพัฒนาระบบได้ง่าย (ถ้ามีความเข้าใจมันนะ) เนื่องจากเตรียมชุดของ library ที่จำเป็นไว้ให้แล้ว เนื่องจากถูกออกแบบมาให้สร้าง REST APIs ได้ง่าย ที่สำคัญ start service ได้ง่าย ๆ อีกด้วย มี Embedded Webserver ให้ด้วยนั่นก็คือ Tomcat/Jetty มี feature ที่สำคัญอีกคือ Metric และ Healthcheck ของ service มี embedded database ไว้ให้ทดสอบคือ H2 database เข้ากับแนวคิด Microservice มากเลย แต่ปัญหาเดิม ๆ ของ Spring framework ก็คือ Library ต่าง ๆ เยอะ ดังนั้นในการเริ่มต้นก็ต้อง download library ผ่าน Apache Maven ซึ่งใช้เวลานานพอสมควร ขนาดของไฟล์ JAR/WAR มีขนาดใหญ่ เนื่องจากมี library เยอะนั่นเอง แค่เริ่มต้นระบบก็มีขนาดไป ประมาณ 50 MB แล้วนะ (REST + JDBC + ลืมเอา hibernate ออก) ส่วนความซับซ้อนของตัว Spring framework เอง ไม่ต้องพูดถึง ดังนั้นนั้น ก่อนใช้งานต้องเข้าใจมันให้ดีก่อนนะ เพื่อให้เราสามารถจัดการกับความซับซ้อนเหล่านั้นได้มาเริ่มต้นวางโครงสร้างระบบกันดีกว่า
เริ่มจากการแบ่งระบบเป็น module ย่อย ๆ ดังนี้- REST สำหรับ code ของ controller สำหรับกำหนด service ต่าง ๆ เพื่อรับ request และ ส่ง response กลับไป
- Model สำหรับจัดการข้อมูลจากระบบต่าง ๆ ทั้ง database, external service
- สำหรับ REST จะมี MockMvc เอาไว้ทดสอบ
- สำหรับ Model นั้นใช้งาน JDBC ซึ่งมี Embedded database คือ H2 database ให้ใช้งาน แต่ในระบบตัวอย่างผมใช้ MariaDB ไปเลย
- schema.sql สำหรับสร้าง table
- data.sql สำหรับสร้างชุดข้อมูลเริ่มต้น
ต่อมาคือ REST module ซึ่งจัดโครงสร้างคล้าย ๆ กับ Model
แต่ไม่มี JDBC นะ !! ในตัวอย่างจะใช้ Embedded Web Server คือ Apache Tomcat สิ่งที่สนใจก็เช่นเดิมคือ การทดสอบนั่นเอง โดยส่วนนี้จะทำการทดสอบด้วย MockMvc นะ เป็น integration test กันทั้งสายของ feature นั้น ๆ เลย ดังนั้นการเตรียมระบบและข้อมูลจึงมีความสำคัญมาก ๆ สามารถเขียน code ได้ดังนี้ [gist id="b480580de49a4380aa76c08483f301b2" file="FeatureControllerTest.java"] ชีวิตในการพัฒนาระบบด้วยภาษา Java ก็ยาวนิดหน่อย แต่ก็ไม่ได้ยากหากมีความพยายามเพียงพอเพียงเท่านี้ก็สามารถตั้ง project structure ด้วย Spring Boot แบบง่าย ๆ ได้แล้วนะครับ
สิ่งที่ต้องคำนึงถึงเสมอคือ ถ้าคุณตั้ง project structure ได้แล้ว จะทดสอบระบบกันอย่างไร ? จะติดตั้งกันอย่างไร ? ต้องคิดถึงก่อนจะเริ่มเขียน code บรรทัดแรก หรือก่อนเริ่ม feature แรกเลยนะครับ จากนั้นจึงลงมือทำและพิสูจน์ให้ได้ ไม่ใช่มานั่งเทียนเขียน architecture ที่ดูสวยหรูกัน !!!พูดได้ ก็ต้องทำให้เห็นเช่นกัน