Dynamics 365 Business Central: การใช้ Protected Variables เพื่อสร้างความยืดหยุ่นและปลอดภัยใน AL Programming

ในการเขียนโปรแกรมด้วยภาษา AL (Application Language) สำหรับ Microsoft Dynamics 365 Business Central การควบคุมการเข้าถึงตัวแปรเป็นสิ่งสำคัญที่ช่วยให้โค้ดมีความปลอดภัยและสามารถจัดการได้ง่ายขึ้น หนึ่งในวิธีการควบคุมการเข้าถึงตัวแปรคือการใช้ตัวแปรประเภท Protected ซึ่งช่วยให้เราสามารถควบคุมการเข้าถึงตัวแปรได้ตามต้องการ ในบทความนี้ เราจะมาเจาะลึกถึงการใช้งานตัวแปร Protected พร้อมตัวอย่างการใช้งาน รวมถึงข้อดีและข้อเสียของการใช้ตัวแปรประเภทนี้

อะไรคือตัวแปร Protected?

ตัวแปร Protected ในภาษา AL คือ ตัวแปรที่สามารถเข้าถึงได้เฉพาะในออบเจ็กต์ที่ประกาศตัวแปรนั้น และในออบเจ็กต์ที่สืบทอดมาจากออบเจ็กต์นั้น ๆ เท่านั้น (Only accessible within the object where it’s declared and in its subclasses) นั่นหมายความว่าโค้ดที่อยู่นอกออบเจ็กต์ที่ไม่ได้สืบทอดจากออบเจ็กต์นั้นจะไม่สามารถเข้าถึงตัวแปรนี้ได้

การประกาศและใช้งานตัวแปร Protected

ในการประกาศตัวแปร Protected ในภาษา AL คุณสามารถทำได้โดยการเพิ่มคีย์เวิร์ด protected ก่อนการประกาศตัวแปร ตัวอย่างเช่น:

ในตัวอย่างนี้ ตัวแปร ShowSensitiveData สามารถถูกเข้าถึงได้เฉพาะในออบเจ็กต์ที่ประกาศตัวแปรนี้ รวมถึงออบเจ็กต์ที่สืบทอดมาจากออบเจ็กต์นี้เท่านั้น

ตัวอย่างการใช้งาน Protected Variables ในภาษา AL

สมมุติว่าเราต้องการสร้างฟีเจอร์ใหม่สำหรับการแสดงข้อมูลที่สำคัญในระบบ ซึ่งข้อมูลนี้จะถูกแสดงเฉพาะในบางสถานการณ์เท่านั้น

สร้าง Table ใหม่

ในตัวอย่างนี้ เราได้สร้างตารางใหม่ชื่อว่า Sensitive Data เพื่อเก็บข้อมูลที่สำคัญ เช่น Sensitive Info ที่เกี่ยวข้องกับลูกค้า

สร้าง Page ใหม่

ในเพจ Sensitive Data List เราได้ใช้ตัวแปร Protected ชื่อว่า ShowSensitiveData เพื่อควบคุมการแสดงผลของฟิลด์ Sensitive Info ข้อมูลนี้จะถูกซ่อนโดยค่าเริ่มต้น และจะถูกแสดงเมื่อผู้ใช้กดปุ่ม Toggle Sensitive Info

สร้าง Page Extension เพื่อขยายฟังก์ชัน

ใน Page Extension นี้ เราได้เพิ่มปุ่ม Reset Sensitive Info Visibility ซึ่งจะทำการซ่อนข้อมูล Sensitive Info ทุกครั้งที่ผู้ใช้กดปุ่มนี้

ตัวอย่างผลลัพธ์

ข้อดีของการใช้ Protected Variables ในภาษา AL

  1. การควบคุมการเข้าถึง (Access Control):
    • ตัวแปร Protected ช่วยให้คุณสามารถกำหนดได้ว่าตัวแปรจะถูกเข้าถึงได้จากที่ไหนบ้าง เฉพาะภายในตัวโค้ดหรือจากออบเจ็กต์ที่สืบทอด (Inheritance) มาเท่านั้น ข้อมูลสำคัญจึงไม่ถูกแก้ไขโดยไม่จำเป็น
  2. การสืบทอด (Inheritance):
    • ออบเจ็กต์ย่อยสามารถใช้ตัวแปร Protected จากออบเจ็กต์หลักได้อย่างอิสระ ช่วยให้สามารถเพิ่มฟังก์ชันการทำงานใหม่ ๆ โดยใช้ข้อมูลที่ถูกปกป้องในออบเจ็กต์หลักได้อย่างมีประสิทธิภาพ
  3. การออกแบบโค้ดที่ยืดหยุ่น (Flexible Code Design):
    • ตัวแปร Protected ทำให้คุณสามารถสร้างโค้ดที่ยืดหยุ่น โดยการเก็บข้อมูลและฟังก์ชันการทำงานในออบเจ็กต์หลัก แล้วสืบทอดและใช้งานในออบเจ็กต์ย่อย ซึ่งช่วยลดการทำซ้ำโค้ด (Code Duplication)
  4. ลดข้อผิดพลาด (Reduced Errors):
    • เนื่องจากตัวแปร Protected จะไม่สามารถเข้าถึงได้จากภายนอกออบเจ็กต์หรือออบเจ็กต์ที่ไม่ได้สืบทอด การลดการเข้าถึงตัวแปรที่ไม่จำเป็นจะช่วยลดโอกาสในการเกิดข้อผิดพลาดในโค้ด

ข้อเสียของการใช้ Protected Variables ในภาษา AL

  1. ความซับซ้อนในการจัดการ (Complex Management):
    • การใช้ตัวแปร Protected อาจทำให้โค้ดซับซ้อนขึ้น โดยเฉพาะเมื่อมีออบเจ็กต์ย่อยหลายออบเจ็กต์สืบทอดจากออบเจ็กต์หลัก ผู้พัฒนาต้องเข้าใจโครงสร้างการเข้าถึงข้อมูลทั้งหมด ทำให้การบำรุงรักษาโค้ดยากขึ้น
  2. การพึ่งพาคลาสหลัก (Base Class Dependency):
    • เมื่อออบเจ็กต์ย่อยพึ่งพาตัวแปร Protected จากออบเจ็กต์หลัก หากออบเจ็กต์หลักมีการเปลี่ยนแปลง จะต้องมีการปรับปรุงโค้ดในออบเจ็กต์ย่อยให้สอดคล้องกัน ซึ่งอาจเพิ่มงานในการบำรุงรักษา
  3. การใช้ที่ไม่จำเป็น (Unnecessary Usage):
    • หากมีการใช้ Protected โดยไม่จำเป็น เช่น ประกาศตัวแปร Protected ที่ไม่ต้องการความปกป้อง อาจทำให้โค้ดยุ่งยากโดยไม่จำเป็น ซึ่งควรใช้ Protected เฉพาะในกรณีที่จำเป็นจริง ๆ เท่านั้น
  4. ความยุ่งยากในการขยาย (Complicated Extensions):
    • เมื่อมีการสืบทอดตัวแปร Protected หลายชั้น อาจทำให้โค้ดยุ่งยากในการเข้าใจและขยายฟังก์ชันใหม่ ๆ เนื่องจากต้องติดตามว่าแต่ละออบเจ็กต์ใช้ตัวแปรเหล่านี้อย่างไร

สรุป

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

Leave a comment