แนวคิดเรื่อง AOP อธิบายถึงหุ่นจำลอง


19

บางคนสามารถอธิบายแนวคิดของ AOP สำหรับหุ่นได้ที่จุดเชื่อม, จุดตัด, การทอ ฯลฯ

ตัวอย่างเช่น: มุมมอง: การทำให้เป็นโมดูลของข้อกังวลที่ตัดข้ามหลายคลาส นั่นหมายความว่าอย่างไร?

คำตอบ:


15

นึกถึงข้อกังวลในฐานะกลุ่มการทำงานเช่นการบันทึกการตรวจสอบความปลอดภัย

ฟังก์ชันเหล่านี้เคยอยู่ในรหัสมากที่สุด แต่พวกเขาไม่ได้มีชีวิตอยู่จริงๆในสัตว์> เรียนสุนัขของเรา - พวกเขามีฟังก์ชันการทำงานที่ควรจะอยู่ในชั้นเรียนจำนวนมาก - พวกเขามีความกังวลเกี่ยวกับการตัดข้าม

  • Joinpointเป็นสถานที่ในรหัสที่รหัสด้านที่เป็นจริงวิ่ง

  • pointcutเป็นวิธีการที่จะพูดในสิ่งรหัสทำงานที่ jointpoint

  • การทอผ้า - คือเมื่อคอมไพเลอร์ / ระบบใช้รหัสปกติของคุณและรวมรหัส AOP ทั้งหมดเพื่อที่จะทริกเกอร์รหัสที่ถูกต้อง ฯลฯ - สามารถคิดได้ว่านี่เป็นขั้นตอนก่อนการคอมไพล์พิเศษ

ตัวอย่างที่เข้าใจง่ายคือ:

  1. เราต้องการติดตามการเรียกใช้เมธอดทั้งหมดเพื่อจุดประสงค์ในการดีบั๊ก (เช่นเราต้องการดูวิธีการที่เรียกว่าเรียงตามลำดับ)
  2. เราสร้างมุมมองที่บันทึกชื่อของวิธีการเมื่อมันถูกเรียก
  3. เราสร้างจุดทางลัดที่เชื่อมโยงมุมมองกับวิธีการทั้งหมดในรหัส ในกรอบ AOP ส่วนใหญ่คุณสามารถทำสิ่งนี้ได้อย่างง่ายดายด้วยไวลด์การ์ดบางส่วน
  4. ตอนนี้เรามีการบันทึกทุกวิธีที่เคยเรียกใช้

โปรดทราบว่าคำศัพท์นั้นมีความแตกต่างกันเล็กน้อยระหว่างการใช้งานที่แตกต่างกันและกรอบ AOP


เช่นเดียวกับที่ฉันเขียนคำตอบยาว ๆ ! ขอแสดงความกระชับมากขึ้นฉันชอบมันมาก จะแก้ไขเล็กน้อยเพื่อความชัดเจน
Martijn Verburg

ขอบคุณฉันควรเรียนรู้กฎการจัดรูปแบบลืมตลอดไป
Jonno

ดูเหมือนว่าสิ่งนี้จะง่ายต่อการใช้งานกับ Python decorators หรือ Lisp macros- Y / N?
พอลนาธาน

@ พอล - ไม่คุ้นเคยกับสิ่งก่อสร้างที่คุณพูดถึงฉันกลัวและกูเกิลด่วนก็ไม่ให้ข้อมูลเชิงลึกพอที่จะตอบฉันได้
Jonno

@ พอลนาธาน: AOP ค่อนข้างง่ายในภาษาแบบไดนามิก กรอบ AOP ง่าย ๆ สามารถสร้างขึ้นได้ในช่วงบ่าย ในภาษาที่คอมไพล์อย่างเช่นชีวิต Java นั้นไม่ได้หวานนัก
วินไคลน์

-1

อ่านตามลำดับ

แต่ละคำจำกัดความสร้างบนคนก่อนหน้า

ข้ามความกังวลตัด

สิ่งที่รบกวนคุณ (ข้อกังวล) ทุกที่ (การตัดขวาง) ในแอปพลิเคชันของคุณ เช่นการบันทึกหรือความปลอดภัย

แง่มุม

กลุ่มของรหัสที่ถูกเพิ่มโดยอัตโนมัติก่อน , หลัง , หรือทั้งสอง ( รอบ ) รหัสที่คุณมีอยู่

PointCut & JoinPoint

                  Application code
                           |
                           |
                           |
                           |
                          \|/
                           |
JoinPoint  ----------->("before" aspect, on the way in)  // just before your intercepted application code
Pointcut start--------> public String myMethod(params ...)
                   //your application code
Pointcut finish--------> return (foo)
JoinPoint  ----------->("after" aspect, on the way out)  // just after your intercepted application code
                           |
                          \|/
                           |
                           |
                           |
                  Application code

pointcut

สถานที่ในการเรียกใช้โค้ดโดยที่ส่วนหนึ่งของมุมมองดำเนินการ

JoinPoint

จุดที่ลักษณะของคุณ "รวม" จุดตัด ที่ "ก่อน" joinPoint คุณจะสามารถเข้าถึงพารามิเตอร์ได้ที่ "หลังจาก" joinPoint คุณจะสามารถเข้าถึงค่าส่งคืน หากมีข้อผิดพลาดเกิดขึ้นคุณอาจต้อง "ลองจับในที่สุด" เพื่อจัดการหรือโยนใหม่

การทอผ้า

กระบวนการเพิ่มแง่มุมรอบ ๆ จุดตัด


ใครก็ตามที่ลงคะแนนให้คำตอบของฉันโปรดแสดงความคิดเห็นว่าทำไม - ถ้าคุณไม่รังเกียจ ฉันสัญญาว่าฉันจะไม่โต้แย้งเรื่องนี้ อย่างไรก็ตามฉันอยากรู้ว่าฉันควรทำสิ่งใดให้ดีกว่านี้ ขอขอบคุณ!
Prashant
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.