SOLID Principles คืออะไร

SOLID คือ หลักการในการออกแบบซอฟต์แวร์ที่ดี ที่ช่วยให้โครงสร้างของโปรแกรมที่เขียนนั้นมีความชัดเจนและดูแลรักษาได้ง่ายในอนาคต SOLID ย่อมาจาก

  • S = Single Responsibility Principle (SRP)
  • O = Open-Closed Principle (OCP)
  • L = Liskov Substitution Principle (LSP)
  • I = Interface Segregation Principle (ISP)
  • D = Dependency Inversion Principle (DIP)

Continue reading

Javascript มี -0 (Negative Zero) ด้วยนะ

เนื่องจากไม่เชี่ยวชาญ Javascript ถึงจะรู้ว่ามันไม่เหมือนภาษาทั่วๆไปอยู่หลายอย่าง แต่สิ่งที่เจอมาล่าสุดมันแปลกมาก คือ สั่งให้แสดงค่าตัวเลขออกมาแล้วเจอว่ามันแสดงผลเป็น -0 เข้าใจถูกแล้วครับ มันมีเครื่องหมายลบหน้าเลขศูนย์ด้วย ซึ่งมันอาจจะแปลกๆเวลาให้คนที่มาดู ว่ามันต่างจาก 0 ธรรมดาอย่างไร

พอจะรู้อยู่บ้างว่าตัวแปรชนิด Number ใน Javascript นั้นเก็บได้ทั้งจำนวนเต็มและจำนวนแบบมีทศนิยม เหตุการณ์ที่เกิดขึ้นนี้ เกิดจากการใช้ฟังก์ชัน Math.round(ตัวเลขติดลบที่จริงๆแล้วน่าจะเป็นค่าศูนย์) เช่น Math.round(-0.0000123) เอาไปลองใน Chrome Console ดูได้เลย

พอจะต้องแก้ให้ตรวจว่าถ้าเจอ -0 ก็ต้องแสดงผลเป็น 0 จึงได้เจอหนังสือเล่มหนึ่งสรุปไว้ให้แล้วว่านี่คือกลไกใน Javascript จริงๆ!!!

Continue reading

9 featureใหม่ใน Java 9

หลังจาก Java 8 release ได้ 3 ปี กำหนดการ release Java 9 คือ 21 กันยายน 2560 นอกเหนือจากระบบ module ที่เป็นของใหม่และมีการพูดถึงมากที่สุดแล้ว ก็ยังมีหัวข้ออื่นๆอีก รวมเป็น 9 ข้อด้วยกัน

Continue reading

มีอะไรใหม่ใน C# 7

ภาษา C# version ใหม่ ได้เปิดให้ใช้งานตั้งแต่เดือนมีนาคม 2017 แล้ว และพร้อมใช้งานใน Visual Studio 2017

ใน C# 7 นั้นได้เพิ่มความสามารถของภาษาเพื่อให้เขียนโค้ดได้สั้นลง และรองรับการเขียนโปรแกรมสมัยใหม่ เช่น tuple ซึ่งลดข้อจำกัดของการคืนค่าของฟังก์ชันได้มากกว่า 1 ค่า หรือการใช้งานฟังก์ชันในลักษณะของตัวแปร คล้ายกับของ Javascript

รายการ feature ใหม่ใน C# 7 มีดังนี้

Continue reading

REST API กับ HTTP Method

การออกแบบ Web API ในปัจจุบัน ส่วนใหญ่จะเป็นแบบ RESTful ที่รับส่งข้อมูลแบบ JSON ไปหมดแล้ว การออกแบบ API ให้ผู้อื่นใช้งานง่ายจึงมีความสำคัญมากขึ้น

โดยทั่วไป การ request ไปหา API จะอยู่ในรูปแบบ GET ไม่ก็ POST โดยขึ้นกับว่าจะเป็นการรับ หรือส่งข้อมูล การออกแบบ API แบบง่ายที่สุดก็คือใช้ชื่อ ในการบ่งบอกว่า API นั้นทำอะไร เช่น /getproduct หรือ /updateproduct

แต่พอเป็นการใช้งาน API เพื่อทำงานแบบ CRUD นั้น สามารถใช้ HTTP Method หรือ Verb เข้ามาเพื่อให้ API ดูชัดเจนมากขึ้นได้ ถึงจะไม่ได้เป็นกฎตายตัว แต่ถ้าเราทำตาม มันก็จะช่วยให้ผู้ใช้งานเข้าใจได้เร็วขึ้น ยิ่งถ้าเป็น public API ด้วยแล้ว ก็แทบจะไม่ต้องเขียน document อธิบายใดๆเลย

ควรใช้ HTTP Verb คู่กับ operation CRUD ดังนี้

  • GET = R(etrieve)
  • POST = C(reate)
  • PUT = U(pdate)
  • DELETE = D(elete)

หน้าตาของ API endpoint เช่น เราต้องการสร้าง API สำหรับดึงข้อมูลสินค้า ก็จะเป็นลักษณะนี้

  • GET /product/1 คือ ดึงข้อมูลสินค้าที่รหัสสินค้า = 1
  • POST /product คือ เพิ่มข้อมูลสินค้า โดยส่งข้อมูลสินค้าเข้ามาใน body
  • PUT /product/1 คือ แก้ไขข้อมูลสินค้าที่รหัส = 1 โดยใช้ข้อมูลจาก body
  • DELETE /product/1 คือ ลบข้อมูลสินค้ารหัส = 1 ออกจากระบบ

ในด้านผู้ใช้ จะเห็นว่าถ้าจะใช้งาน API นี้ รู้เพียงแค่ endpoint คือ /product ก็สามารถเดาได้เลยว่าจะจัดการข้อมูลสินค้าอย่างไร ผ่านการใช้ HTTP Verb จึงง่ายกว่าเมื่อเทียบกับ /getproductbyid /productnew /updateproduct ว่า Verb กับ Entity อยู่ตรงไหนและใช้ keyword อะไรกันแน่

สแลช (SLASH)

ส่ง message ข้าม process ด้วย NetMQ (ZeroMQ)

blog-netmq

NetMQ เป็นไลบรารีในการส่ง message ข้ามโพรเซส (process) เพื่อแลกเปลี่ยนข้อมูล มีหลายวิธีในการรับส่ง ทั้งแบบ Request-Response, Publish-Subscribe หรือ Push-Pull ซึ่งในแต่ละภาษาก็จะมีไลบรารีที่ทำงานในลักษณะนี้อยู่

NetMQ นั้นเป็นไลบรารีแบบพอร์ต (native port) จาก ZeroMQ โดยใช้ภาษา C# ในที่นี้ ขอยกตัวอย่างการทำงานแบบ Publish-Subscribe หรือเรียกย่อๆว่า PubSub ซึ่งจะมีโพรเซสที่เป็นผู้ส่งข้อมูล (Publisher) กับ ผู้รับข้อมูล (Subsccriber) โดยจะใช้สื่อกลางคือ Topic เปรียบเทียบได้กับการติดตามข่าวสาร ถ้าเราสนใจหัวข้อใดๆ ก็จะไปติดตามเรื่องนั้นๆ จนกว่าจะหยุดการติดตาม หรือเทียบได้กับการปิดโพรเซสไปนั่นเอง

Topic ก็คือชื่อที่ตกลงกันล่วงหน้าระหว่าง Publisher กับ Subscriber เท่านั้น ซึ่งเราสามารถจะจัดโครงสร้างได้ด้วย เช่น ใช้สแลช ( / ) ในการระบุหัวข้อย่อย ในลักษณะเช่น “Music/Rock” โพรเซสที่ subscribe ที่ Topic “Music” จะได้รับข้อความจาก Publisher ที่ส่งมายัง Topic “Music” และ “Music/Rock”

วิธีการเขียนโปรแกรมก็ไม่มีอะไรซับซ้อนมาก ดังนี้

Continue reading

การจับ Exception จาก Task ที่ไม่ได้ catch ไว้ใน C#

slash-blog-c-exception

ในการเขียนโปรแกรมภาษา C# ให้ทำงานในเธรด (thread) ถ้าเกิดเอ็กเซ็พชัน (exception) ขึ้น จะตรวจสอบได้จาก Task.IsFaulted() ซึ่งเราต้องเก็บตัวแปรทาสค์ (task) ไว้

แต่การเขียนให้ตรวจสอบสถานะของทาสค์นั้น อาจไม่สะดวกและทำให้โปรแกรมซับซ้อน ใน C# 5.0 ขึ้นไปที่รองรับการใช้ async/await จะทำให้เขียนได้ง่ายขึ้นมาก โดยจับ exception เสมือนว่าทำงานแบบ synchronous ได้เลยดังนี้

Continue reading