General Architectural Design Principles

มาทำความรู้จักกับพื้นฐานการออกแบบสถาปัตยกรรมทั่วไปกัน ซึ่งสามารถนำไปใช้กับการออกแบบสถาปัตยกรรมอะไรก็ได้ ไม่ว่าจะเป็นสถาปัตยกรรมสิ่งก่อสร้าง, สถาปัตยกรรมเครื่องกล หรือแม้แต่สถาปัตยกรรมซอฟต์แวร์ แต่จะขอเน้นที่สถาปัตยกรรมซอฟต์แวร์กันนะครับ จะได้ออกแบบสถาปัตยกรรมเก่งๆ กันครับ…

Balance

  • Balance คือ การรักษาสมดุลขององค์ประกอบต่างๆ ในงานออกแบบหรือในระบบ เพื่อไม่ให้หนักไปทางใดทางหนึ่งมากเกินไป สิ่งสำคัญที่ต้องใช้พิจารณาคือมุมมองและประสบการณ์ และอีกประการคือ ‘สติ’ มิเช่นนั้นแล้วหากปล่อยให้อารมณ์, อัตตา หรือความสนใจไหลไปทางใดมากเกินไปอาจทำให้เสียสมดุลได้
  • ประยุกต์ Balance ได้กับหลายเรื่อง อาทิ
    • Balance concerns คือ การคำนึงถึงสิ่งที่สนใจหรือประเด็นหลักที่สำคัญ อย่างเท่าเทียม ไม่ให้น้ำหนักกับ concern ใด concern หนึ่งมากเกินไป
    • Balance logic allocation คือ การจัดวางลอจิกต่างๆ ในระบบได้อย่างลงตัว ไม่กระจุกตัวอยู่จุดใดจุดหนึ่งมากเกินไป
    • Balance qualities คือ การรักษาสมดุลของคุณภาพหลักโดยไม่เอนเอียงสนใจเพียงคุณภาพใดคุณภาพหนึ่งมากเกินไป
    • Balance load คือ การจัดการโหลดในแต่ละจุดให้มีความสมดุลไม่มีจุดใดจุดหนึ่งมีโหลดหนักมากเกินไป
  • ในระบบขนาดใหญ่ อาทิ Enterprise System การรักษาสมดุลไม่ใช่เรื่องง่าย จึงต้องมองภาพรวมให้ดีๆ

Rhythm

  • Rhythm คือ การจัดวางจังหวะอย่างลงตัว อาทิ
    • จุดใดควรกำหนดให้ทำงานหนัก/เบา
    • จุดใดยอมให้มีความซับซ้อนได้จุดใดไม่ควรมี
    • การจัดการอัตราการรับ-ส่งข้อมูลระหว่างอิลิเม้นต์ เช่น ระหว่างเครื่อง ให้เป็นจังหวะ หรือมีการควบคุมอัตราส่วนเหมาะสมในแต่ละจุด เช่น กำหนดให้แต่ละเซอร์วิสให้บริการ request ที่เข้ามาได้ไม่เกิน 1,000 request/วินาที
    • การควบคุมจังหวะการ dispatch หรือฟอร์เวิร์ด request ไปยังเครื่องต่างๆ เช่น ในการทำงานของ load balancer
    • การจัดการจังหวะการทำงานของแต่ละขั้นตอนของ process, workflow, algorithm ให้มีความไหลลื่น ไม่ติดขัดจนเกิด latency และคอขวด โดยให้แต่ละอิลิเม้นต์ รับ-ส่ง-ประมวลผล กันได้อย่างสอดรับ (เข้าจังหวะ) กันพอดี
    • การจัดวางจังหวะขององค์ประกอบ, สีสัน, เนื้อหา ของหน้าจอได้อย่างน่าสนใจ
    • ฯลฯ

Harmony

  • Harmony คือ การจัดวาง/การผสมผสาน/การทำงานของแต่ละส่วนให้มีความกลมกลืนไม่ดูขัดกัน อาทิ
    • การจัดกลุ่มคลาส domain ที่เกี่ยวข้องกันให้รวมเป็นกลุ่ม domain เดียวกัน
    • การ orchestrate ของทรานแซกชั่นที่มีลำดับการทำงาน, การประมวลผล และการเข้าถึง resource ต่างๆ ได้อย่างกลมกลืน
    • การทำงานร่วมกัน (interoperate) ได้อย่างกลมกลืนระหว่างอิลิเม้นต์ต่างๆ ที่อาจแตกต่างกันในด้านภาษาโปรแกรม/แพลตฟอร์ม/เทคโนโลยี
    • การจัดวางลอจิกและอิลิเม้นต์ต่างๆ ที่มีโครงสร้างที่เป็นระเบียบ (เช่น การใช้ architectural layer) ซึ่งสามารถทำงานร่วมกันได้อย่างกลมกลืน
    • การจัดวางองค์ประกอบ, สีสัน, เนื้อหา ของหน้าจอได้อย่างกลมกลืน มี user friendly ที่ดีทำให้ผู้ใช้รู้สึกสบายใจขณะใช้งาน
    • ฯลฯ

Unity

  • Unity คือ ความมีเอกภาพ องค์ประกอบต่างๆ สะท้อนจุดมุ่งหมายเดียวกัน หรือมี Modularity ที่ดีนั่นเอง อาทิ
    • แต่ละอิลิเม้นต์มีหน้าที่หลักเพียงหนึ่งเดียว
    • ระบบมีฟังก์ชั่นและคุณภาพที่มุ่งเน้นสนับสนุนประเด็นหลักของ business domain นั้นๆ
    • การชูจุดเด่นของหน้าจอให้ผู้ใช้อ่านแล้วเข้าใจชัดเจน หรือให้ผู้ใช้ใช้งานได้ถูกต้องชัดเจน
    • การใช้เทคนิค/เทคโนโลยี/เฟรมเวิร์ก/pattern ที่อาจหลากหลาย แต่เป็นความหลากหลายที่พอนำมาใช้ร่วมกันแล้วกลับสนับสนุนจุดมุ่งหมายหลักเดียวกันได้ เช่น ระบบบริหารคลังสินค้าหนึ่งมี architectural style เป็น distributed service ซึ่งเครื่องเซิร์ฟเวอร์ต่างๆ มีเซอร์วิสที่อิมพลีเม้นต์ด้วยภาษาโปรแกรม, tool และเทคนิคที่แตกต่างกัน แต่เซอร์วิสทั้งหมดสามารถทำงานร่วมกันได้ และแต่ละเซอร์วิสต่างมี operation สนับสนุนงานหลักด้านบริหารคลังสินค้าครอบคลุม
    • ฯลฯ

Contrast

  • Contrast คือ ความขัดแย้ง ที่ในบางจังหวะหากจัดวางให้เหมาะสมอาจทำให้เกิดความลงตัวทำให้เกิดความน่าสนใจ เช่น สีแดงกับสีเขียวเป็นคู่สีตรงข้ามกัน หากนำมาใช้ร่วมกันไม่ดีก็ดูไม่สวยภาพจะดู ‘แรง’ ดูไม่สบายตา แต่หากจัดวางองค์ประกอบและจังหวะให้ดีอาจทำให้ภาพดูโดดเด่นน่าสนใจได้ การประยุกต์ในงานออกแบบระบบ อาทิ
    • อิลิเม้นต์ในเลเยอร์ application, business service, domain ใช้แนวทางการออกแบบแบบ Object-Orientation แต่อิลิเม้นต์ต่างๆ ที่ทำหน้าที่จัดการทรานแซกชั่นซึ่งอยู่ในเลเยอร์ transaction script ใช้แนวทางการออกแบบแบบ Functional
    • ระบบฝั่งเซิร์ฟเวอร์ทั้งหมดพัฒนาด้วยภาษาโปรแกรม Java เพราะต้องการ robustness แต่ส่วนแอพพลิเคชั่นไคลเอ็นต์ฝั่งผู้ใช้พัฒนาด้วย VB.NET เพราะทีม developer มีความชำนาญ VB.NET สูง และระบบปฏิบัติการของผู้ใช้ทุกคนเป็น Windows
    • การ call กันระหว่างอิลิเม้นต์ที่อยู่ใกล้กันเลือกใช้แบบ fine-grained call แต่การ call กันระหว่างอิลิเม้นต์ที่อยู่ไกลกันเลือกใช้แบบ coarse-grained call เพราะระยะทางมีผลต่อ performance
    • ฯลฯ

Emphasis

  • Emphasis คือ การเน้น เพื่อให้โดดเด่น, ให้น่าสนใจ, ให้ชัดเจน, ให้เหมาะสมลงตัว อาทิ
    • อิลิเม้นต์ในเลเยอร์ application เน้นประมวลผล application logic ซึ่งทำงานไม่หนัก เครื่องจึงไม่ต้องมีสเป็กสูงมากนัก
    • อิลิเม้นต์ในเลเยอร์ business service เน้นประมวลผล service logic, ทรานแซกชั่น และงาน security หนักๆ เครื่องจึงต้องมีสเป็กสูงๆ
    • ระบบ ABC เน้นการทำงานในส่วนแอพพลิเคชั่นบนโทรศัพท์มือถือเป็นหลัก ส่วนเซอร์วิสฝั่งเซิร์ฟเวอร์ทำหน้าที่เพียงสนับสนุนข้อมูลเท่านั้น
    • ระบบ Internet Banking ของธนาคาร ก.ไก่ เน้นการจัดการคุณภาพด้าน reliability, security, availability, performance, modifiability และ testability เป็นหลัก
    • ฯลฯ

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s