Angular คือ ตอนที่ 7 : บริการ (Services)

  1. บริการ (Services) ใน AngularJS
    1.1 การสร้างบริการแบบกำหนดเอง
  2. การพึ่งพาการฉีด (Dependency Injection) ใน AngularJS
    2.1 คำอธิบายประกอบการพึ่งพา (Dependency Annotation)
    2.2 การลดขนาดการพึ่งพา (Dependency Minification)
  3. การใช้บริการขั้นสูง (Advanced Usage of Services) และการฉีดการพึ่งพา (Dependency Injection)

AngularJS ซึ่งเป็นเฟรมเวิร์ก JavaScript ยอดนิยมสำหรับการทำเว็บ Angular และทำแอพแบบไดนามิก นำเสนอฟีเจอร์ที่ทรงพลังมากมายสำหรับนักพัฒนา ในบรรดาสิ่งเหล่านี้ กลไกการบริการและการอ้างอิง (DI) มีบทบาทสำคัญในการทำเว็บ Angular และทำแอพ บทความนี้ให้ความเข้าใจที่ครอบคลุมเกี่ยวกับบริการและ DI ใน AngularJS ช่วยให้คุณใช้คุณสมบัติขั้นสูงเหล่านี้ได้อย่างมีประสิทธิภาพในขณะที่ทำเว็บ Angular และทำแอพ

1. บริการ (Services) ใน AngularJS

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

มีบริการในตัวหลายรายการใน AngularJS โดยแต่ละบริการนำหน้าด้วยเครื่องหมายดอลลาร์ ($) ตัวอย่างเช่น บริการ $http ช่วยสร้าง XMLHttpRequests ในขณะที่บริการ $route ใช้สำหรับกำหนดเส้นทาง นอกจากบริการในตัวแล้ว คุณยังสามารถสร้างบริการแบบกำหนดเองโดยใช้.service(), .factory(), หรือ.provider()เมธอดได้ อีกด้วย แต่ละวิธีมีลักษณะเฉพาะที่แตกต่างกัน ทำให้นักพัฒนาสามารถสร้างบริการได้อย่างยืดหยุ่น

1.1 การสร้างบริการแบบกำหนดเอง

มาดูตัวอย่างง่ายๆ ของการสร้างบริการแบบกำหนดเองโดยใช้.service()วิธีการ:

var app = angular.module('myApp', []);
app.service('myService', function() {
    this.greet = function(name) {
        return "Hello " + name;
    };
});

ในตัวอย่างข้างต้น myService เป็นบริการแบบกำหนดเองที่มี greet ฟังก์ชัน ตอนนี้สามารถแทรกลงในคอนโทรลเลอร์หรือบริการอื่น ๆ ภายใน myApp โมดูลได้ แล้ว

2. การพึ่งพาการฉีด (Dependency Injection) ใน AngularJS

หากคุณยังใหม่กับการทำเว็บ Angular และทำแอพ การพึ่งพาอาศัยกันอาจฟังดูน่ากลัว อย่างไรก็ตาม มันเป็นแนวคิดที่ทรงพลังที่ทำให้ AngularJS มีความยืดหยุ่นและทดสอบได้อย่างไม่น่าเชื่อ

พูดง่ายๆ ก็คือ การพึ่งพาอาศัยกันเป็นรูปแบบการออกแบบที่เกี่ยวข้องกับวิธีที่ส่วนประกอบได้รับการพึ่งพา ในบริบทของ AngularJS มันหมายถึงกระบวนการที่ให้บริการ (การพึ่งพา) ให้กับส่วนประกอบอื่น ๆ เช่นตัวควบคุมและบริการ (การพึ่งพา) ระบบย่อย Injector ของ AngularJS จะดูแลการสร้างส่วนประกอบ แก้ไขการพึ่งพา และจัดเตรียมให้กับส่วนประกอบอื่นๆ ตามที่ร้องขอ

ข้อดีหลักประการหนึ่งของการใช้ DI คือการแยกการสร้างออบเจกต์ออกจากออบเจ็กต์ที่ใช้งาน ส่งผลให้โค้ดสะอาดและจัดการได้มากขึ้น

2.1 คำอธิบายประกอบการพึ่งพา (Dependency Annotation)

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

ต่อไปนี้คือตัวอย่างการใส่ myService ข้อมูลที่สร้างขึ้นก่อนหน้านี้ลงในคอนโทรลเลอร์:

app.controller('myController', function($scope, myService) {
    $scope.message = myService.greet('AngularJS');
});

ในตัวอย่างนี้ myService มีการแทรกการอ้างอิงเข้าไปใน myController ทำให้เราสามารถใช้ greet ฟังก์ชัน myService ภายในตัวควบคุมได้

2.2 การลดขนาดการพึ่งพา (Dependency Minification)

สิ่งหนึ่งที่ควรทราบคือตัวย่อ JavaScript จะเปลี่ยนชื่อพารามิเตอร์ของฟังก์ชัน ซึ่งสามารถทำลายการแทรกการพึ่งพาใน AngularJS ได้ เพื่อป้องกันปัญหานี้ AngularJS มีวิธีทางเลือกสองวิธีในการใส่คำอธิบายประกอบการขึ้นต่อกัน: คำอธิบายประกอบ Inline Array และ$injectคำอธิบายประกอบคุณสมบัติ

คำอธิบายประกอบอาร์เรย์แบบอินไลน์

ด้วย Inline Array Annotation เราจะระบุการอ้างอิงในอาร์เรย์ดังนี้:

app.controller('myController', ['$scope', 'myService', function($scope, myService) {
    $scope.message = myService.greet('AngularJS');
}]);

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

$inject คำอธิบายประกอบคุณสมบัติ

อีกวิธีหนึ่งในการใส่คำอธิบายประกอบเพื่อป้องกันพวกเขาจากการย่อขนาดคือ$injectคำอธิบายประกอบคุณสมบัติ:

var MyController = function($scope, myService) {
    $scope.message = myService.greet('AngularJS');
};
MyController.$inject = ['$scope', 'myService'];
app.controller('myController', MyController);

ที่นี่ เรากำลังกำหนด$injectคุณสมบัติอย่างชัดเจนบนฟังก์ชันคอนโทรลเลอร์เป็นชื่ออาร์เรย์ของบริการ เช่นเดียวกับคำอธิบายประกอบแบบ Inline Array วิธีนี้ก็ปลอดภัยต่อการย่อขนาดเช่นกัน

3. การใช้บริการขั้นสูง (Advanced Usage of Services) และการฉีดการพึ่งพา (Dependency Injection)

เมื่อคุณมีประสบการณ์มากขึ้นในการทำเว็บ Angular และทำแอพ คุณจะพบว่าบริการและการพึ่งพาอาศัยเป็นเครื่องมือในการจัดการความซับซ้อนของโค้ดและปรับปรุงความสามารถในการทดสอบ

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

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


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

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

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


Angular คืออะไร (AngularJS)

Angular คือ ตอนที่ 6 : ขอบเขต (Scopes)
Angular คือ ตอนที่ 8 : Dependency Injection (DI)