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

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

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

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

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

Continue reading

ส่ง 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