Constraints (ข้อจำกัด)

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

ดังนั้นแม้ว่าบริการหลักของเรา หรือสิ่งที่เรานำเสนอหลักๆ จะเหมือนเดิม แต่เราก็ต้องหาวิธีปรับให้เข้ากับข้อจำกัดที่แตกต่างกันของแต่ละประเภท interface และความต้องการที่แตกต่างกันของผู้ใช้ของเรา เรื่องนี้อาจถูกผลักดันด้วยเหตุผลทางการเงินล้วนๆ ก็ได้ถ้าคุณต้องการ ยิ่งลูกค้าพอใจมากเท่าไรก็ยิ่งได้เงินมากขึ้นเท่านั้น แต่ก็มีข้อพิจารณาเชิงมนุษยธรรมและจริยธรรมด้วยเช่นกัน เมื่อเราละเลยลูกค้าที่มีความต้องการเฉพาะ เราก็ปฏิเสธโอกาสที่พวกเขาจะได้ใช้บริการของเรา ในบางบริบท การทำให้ผู้คนไม่สามารถนำทาง UI ได้เพราะการตัดสินใจด้านการออกแบบ ได้นำไปสู่การฟ้องร้องและค่าปรับ ตัวอย่างเช่น สหราชอาณาจักร พร้อมกับอีกหลายประเทศ มีกฎหมายที่กำหนดให้เว็บไซต์ต้องเข้าถึงได้สำหรับผู้พิการอย่างถูกต้องสมควร 5

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

ลักษณะของการโต้ตอบก็เปลี่ยนไปตามอุปกรณ์ด้วยเช่นกัน ผมไม่สามารถคลิกขวาบนแท็บเล็ตได้ง่ายๆ บนโทรศัพท์มือถือ ผมอาจต้องออกแบบ interface ให้ใช้งานด้วยมือเดียวได้เป็นส่วนใหญ่ โดยส่วนใหญ่ควบคุมด้วยนิ้วโป้ง ในที่อื่นๆ ผมอาจให้คนโต้ตอบกับบริการผ่าน SMS ในพื้นที่ที่ bandwidth มีจำกัด การใช้ SMS เป็น interface นั้นแพร่หลายมากในกลุ่มประเทศซีกโลกใต้ (global south) ตัวอย่างเช่น

การพูดคุยในวงกว้างเกี่ยวกับ accessibility ของส่วนติดต่อผู้ใช้อยู่นอกขอบเขตของหนังสือเล่มนี้ แต่เราสามารถสำรวจความท้าทายเฉพาะที่เกิดจากไคลเอนต์ประเภทต่างๆ เช่น อุปกรณ์มือถือได้อย่างน้อย วิธีแก้ปัญหาทั่วไปสำหรับการรับมือกับความต้องการที่แตกต่างกันของอุปกรณ์ไคลเอนต์คือการทำ filtering และ call aggregation บางรูปแบบที่ฝั่งไคลเอนต์ ข้อมูลที่ไม่จำเป็นสามารถถูกตัดออกและไม่ต้องส่งไปยังอุปกรณ์ และหลายการเรียกก็สามารถถูกรวมเข้าเป็นการเรียกเดียวได้

ต่อไป เราจะดูสองแพตเทิร์นที่มีประโยชน์ในพื้นที่นี้ นั่นคือ central aggregating gateway และ backend for frontend pattern เรายังจะดูด้วยว่า GraphQL ถูกใช้ช่วยปรับ response ให้เหมาะกับ interface ประเภทต่างๆ ได้อย่างไร