การจะทำความเข้าใจ AOP นั้น หากจะทำให้ง่ายแล้ว ควรจะแบบเป็น 2 ระดับ นั่นคือ การเข้าใจว่า AOP คืออะไร และการเข้าใจว่า AOP ใช้อย่างไร
AOP คืออะไร? -- software developer issue
การเข้าใจตัว AOP นั้น ต้องรู้จักศัพท์ประมาณ 3 คำ นั่นคือ aspect, pointcut, advice ครับ ผมจะขออธิบายแบบเปรียบเทียบแล้วกัน สำหรับ class จะประกอบด้วย methods และ fields ใช่ไหมครับ? aspect ก็จะประกอบด้วย pointcuts และ advices ครับ
pointcut
- เป็นเหมือน regular expression (เพื่อความเข้าใจง่าย, แต่จริงๆถ้าบอกว่าเหมือนกับ XPath จะใกล้เคียงกว่า) เพื่อระบุว่า method ใดของ class ไหนบ้าง ที่อยู่ใน pointcut นี้
pointcut greeting() :
execution(* HelloWorld.sayHello(..));
- จากตัวอย่างข้างบน: pointcut ชื่อ greeting ซึ่งครอบคลุมทุก method ชื่อ sayHello ของ class HelloWorld ไม่ว่า return type กับ parameter จะเป็นอะไรก็ตาม
advice
- เปรียบได้กับ function ที่จะทำงาน ภายใต้ pointcut นั้นๆ จุดที่แตกต่างกับ method ของ class คือ แทนที่จะเป็น return type จะต้องระบุชนิดของ advice แทน (เช่น before, after เป็นต้น)
before() : greeting() {
System.out.println("Begin transaction");
}
- จากตัวอย่างข้างบน: advice นี้คืือก่อนเข้า pointcut ชื่อ greeting ให้ run code นี้ก่อน (อธิบายให้ละเอียดขึ้นได้ว่า ก่อนเข้าทุก method ที่ถูกครอบคลุมด้วย pointcut ที่ชื่อ greeting) หลังจากที่ได้รู้จัก aspect แล้ว คงพอจะเห็นภาพว่า การทำ aspect ขึ้นมานั้น ทำให้เรามีหน่วยใหม่ ที่ใช้ในการห่อ code นอกเหนือจาก class ที่เรามีกันอยู่แล้วใน OOP นอกจากนี้ เรายังมีวิธีการ re-use code วิธีใหม่ นอกจาก composition (การเรียก method ของ class อื่น) แต่เราสามารถสร้างเป็น advices เหล่านี้ขึ้นมาแทน (การสร้าง advices เหล่านี้ โดยให้มันสัมพันธ์กับ classes ที่เราสร้างขึ้นมา เรียกว่าการ weaving aspect กลับเข้าไปยัง classes เหล่านั้น)
ประโยชน์ของ AOP คืออะไร?
AOP เพิ่มความสามารถในการทำ level of abstraction และ composition เนื่องจากเรามี type ใหม่ในการจะห่อ code (นั่นคือ aspect) และวิธีใหม่ในการเชื่อมโยง code เข้าด้วยกัน (นั่นคือ weaving) และด้วยอิสระของการ weaving นี้ ทำให้เราสามารถเขึยน code ขึ้นมาภายใต้ advice แล้วจะเชื่อมไปยัง class ไหนตรงไหนก็ได้ทั้งนั้น
AOP ใช้อย่างไร -- software architect issue
มาถึงวิธีใช้ AOP สักที นะครับ จากที่กล่าวไว้ข้างต้นว่า การ weaving นั้น เราสามารถ weave aspects เข้าไปกับจุดไหนของ architecture ของระบบเราก็ได้ ทำให้เราสามารถเขียน domain model ของระบบโดยใช้ domain model ในการห่อ business logic code แล้วค่อยๆกลับมามอง domain model ในแต่ละมุมมองที่เราสนใจ (concern) เช่น security, robustness คราวนี้เราก็สามารถสร้าง aspects ที่เกี่ยวกับ concerns เหล่านั้น แล้ว weave กลับเข้าไปยัง domain model ของเราได้ครับ
cross-cutting concern คืออะไร?
ประเภทของ concern กลุ่มหนึ่ง ซึ่งถูกมองว่ามันกระจายตัวอยู่ทั่วๆไปในระบบ เช่น security เป็นต้น ซึ่ง code ประเภทนี้ ทุกๆ components ในระบบของเราต่างต้องจัดการกับมัน คราวนี้ เราจะจัดการกับมันอย่างไรดี?
before era of AOP: เราสามารถทำได้สองทาง คือ duplicate code (developers ร้องยี๊... :: ) และสร้าง service class เอาไว้เก็น common methods เหล่านี้ แล้วให้ทุกๆ components มาเรียกใช้เอา (sw. architects ร้องยี๊... :: )
after era of AOP: สร้าง aspects เรื่องนั้นๆขึ้นมาแล้ว weave กลับเข้าไปใน domain model (sw. architects & developers ยิ้ม :D )
cross-cutting concerns เป็นสิ่งที่มองออกได้ยาก และต้องอาศัยประสบการณ์ของ software architect ระดับหนึ่ง อย่างไรก็ดี มี cross-cutting concerns ที่เป็นที่รู้จักแพร่หลายอยู่บ้าง เช่น security, logging, transaction handling เป็นต้น
วันอังคารที่ 29 พฤศจิกายน พ.ศ. 2559
Code ERROR ที่ Web server บอกคืออะไร
code error ที่ web server บอกคืออะไร
* 100 Continue (100 ดำเนินการต่อ)
* 101 Switching Protocols (101 สลับโปรโตคอล)
* 200 OK (200 โอเค)
* 201 Created (201 สร้างแล้ว)
* 202 Accepted (202 ยอมรับแล้ว)
* 203 Non-Authoritative Information (203 ข้อมูลที่ไม่ผ่านการอนุญาต)
* 204 No Content (204 ไม่มีเนื้อหา)
* 205 Reset Content (205 รีเซ็ตเนื้อหา)
* 206 Partial Content (206 เนื้อหาบางส่วน)
* 300 Multiple Choices (300 หลายตัวเลือก)
* 301 Moved Permanently (301 ถูกย้ายถาวร)
* 302 Moved Temporarily (302 ถูกย้ายชั่วคราว)
* 303 See Other (303 ดูอื่นๆ)
* 304 Not Modified (304 ไม่ได้แก้ไข)
* 305 Use Proxy (305 ใช้พร็อกซี่)
* 400 Bad Request (400 คำขอไม่เหมาะสม)
* 401 Authorization Required (401 ต้องได้รับอนุญาต)
* 402 Payment Required (402 ต้องชำระเงิน)
* 403 Forbidden (403 ถูกห้าม)
* 404 Not Found (404 ไม่พบ)
* 405 Method Not Allowed (405 วิธีการไม่ได้รับอนุญาต)
* 406 Not Acceptable (406 ไม่สามารถยอมรับได้)
* 407 Proxy Authentication Required (407 ต้องรับรองความถูกต้องของพร็อกซี่)
* 408 Request Time-Out (408 คำขอหมดเวลา)
* 409 Conflict (409 ขัดแย้ง)
* 410 Gone (ไม่มีอยู่)
* 411 Length Required (411 ต้องกำหนดความยาว)
* 412 Precondition Failed (412 ข้อกำหนดขั้นต้นล้มเหลว)
* 413 Request Entity Too Large (413 ชื่อคำขอใหญ่เกินไป)
* 414 Request-URL Too Large (414 URL คำขอใหญ่เกินไป)
* 415 Unsupported Media Type (415 ประเภทสื่อไม่สนับสนุน)
* 500 Server Error (500 ข้อผิดพลาดของเซิร์ฟเวอร์)
* 501 Not Implemented (501 ไมได้นำไปใช้)
* 502 Bad Gateway (502 เกตเวย์ไม่เหมาะสม)
* 503 Out of Resources (503 ทรัพยากรไม่เพียงพอ)
* 504 Gateway Time-Out (504 หมดเวลาเกตเวย์)
* 505 HTTP Version not supported (505 เวอร์ชัน HTTP ไม่สนับสนุน)
* 506 Variant Also Negotiates
* 507 Insufficient Storage (WebDAV)
* 509 Bandwidth Limit Exceeded (Apache bw/limited extension)
* 510 Not Extended
ที่มา : http://www.thaiseoboard.com/index.php?topic=158078.0
* 100 Continue (100 ดำเนินการต่อ)
* 101 Switching Protocols (101 สลับโปรโตคอล)
* 200 OK (200 โอเค)
* 201 Created (201 สร้างแล้ว)
* 202 Accepted (202 ยอมรับแล้ว)
* 203 Non-Authoritative Information (203 ข้อมูลที่ไม่ผ่านการอนุญาต)
* 204 No Content (204 ไม่มีเนื้อหา)
* 205 Reset Content (205 รีเซ็ตเนื้อหา)
* 206 Partial Content (206 เนื้อหาบางส่วน)
* 300 Multiple Choices (300 หลายตัวเลือก)
* 301 Moved Permanently (301 ถูกย้ายถาวร)
* 302 Moved Temporarily (302 ถูกย้ายชั่วคราว)
* 303 See Other (303 ดูอื่นๆ)
* 304 Not Modified (304 ไม่ได้แก้ไข)
* 305 Use Proxy (305 ใช้พร็อกซี่)
* 400 Bad Request (400 คำขอไม่เหมาะสม)
* 401 Authorization Required (401 ต้องได้รับอนุญาต)
* 402 Payment Required (402 ต้องชำระเงิน)
* 403 Forbidden (403 ถูกห้าม)
* 404 Not Found (404 ไม่พบ)
* 405 Method Not Allowed (405 วิธีการไม่ได้รับอนุญาต)
* 406 Not Acceptable (406 ไม่สามารถยอมรับได้)
* 407 Proxy Authentication Required (407 ต้องรับรองความถูกต้องของพร็อกซี่)
* 408 Request Time-Out (408 คำขอหมดเวลา)
* 409 Conflict (409 ขัดแย้ง)
* 410 Gone (ไม่มีอยู่)
* 411 Length Required (411 ต้องกำหนดความยาว)
* 412 Precondition Failed (412 ข้อกำหนดขั้นต้นล้มเหลว)
* 413 Request Entity Too Large (413 ชื่อคำขอใหญ่เกินไป)
* 414 Request-URL Too Large (414 URL คำขอใหญ่เกินไป)
* 415 Unsupported Media Type (415 ประเภทสื่อไม่สนับสนุน)
* 500 Server Error (500 ข้อผิดพลาดของเซิร์ฟเวอร์)
* 501 Not Implemented (501 ไมได้นำไปใช้)
* 502 Bad Gateway (502 เกตเวย์ไม่เหมาะสม)
* 503 Out of Resources (503 ทรัพยากรไม่เพียงพอ)
* 504 Gateway Time-Out (504 หมดเวลาเกตเวย์)
* 505 HTTP Version not supported (505 เวอร์ชัน HTTP ไม่สนับสนุน)
* 506 Variant Also Negotiates
* 507 Insufficient Storage (WebDAV)
* 509 Bandwidth Limit Exceeded (Apache bw/limited extension)
* 510 Not Extended
ที่มา : http://www.thaiseoboard.com/index.php?topic=158078.0
สมัครสมาชิก:
บทความ (Atom)