MVC AOP มุ่งเน้นการเขียนโปรแกรม
ฉันเชื่อว่าทุกคนไม่ได้สัมผัสกับคำว่า AOP แต่ในความเป็นจริงคุณได้สัมผัสกับมันแล้วในโหมดการออกแบบ แนวคิดที่ใช้โดย AOP นั้นเหมือนกับรูปแบบการออกแบบนั่นคือฟังก์ชั่นจะถูกเพิ่มหรือแก้ไขโดยไม่ต้องแก้ไขรหัสต้นฉบับ นอกจากนี้ AOP ส่วนใหญ่จะใช้ในฤดูใบไม้ผลิ แต่สิ่งที่เขียนในบทความนี้ใช้เฉพาะใน MVC เท่านั้นดังนั้นควรระวัง
1. บทนำ
AOP ที่เรียกว่า (ตัวย่อของการเขียนโปรแกรมที่มุ่งเน้นด้าน) หมายถึงเทคโนโลยีที่ใช้การบำรุงรักษาฟังก์ชั่นโปรแกรมแบบครบวงจรผ่านวิธีการ precompilation และตัวแทนแบบไดนามิกในระหว่างการรันไทม์ AOP เป็นความต่อเนื่องของ OOP หัวข้อร้อนแรงในการพัฒนาซอฟต์แวร์ส่วนสำคัญของกรอบฤดูใบไม้ผลิและกระบวนทัศน์อนุพันธ์ของการเขียนโปรแกรมที่ใช้งานได้ ส่วนต่าง ๆ ของตรรกะทางธุรกิจสามารถแยกได้โดยใช้ AOP ซึ่งจะช่วยลดการมีเพศสัมพันธ์ระหว่างส่วนต่าง ๆ ของตรรกะทางธุรกิจการปรับปรุงความสามารถในการใช้ซ้ำของโปรแกรมและปรับปรุงประสิทธิภาพของการพัฒนา
ข้างต้นเป็นคำอธิบายอย่างเป็นทางการของสารานุกรม Baidu แต่ในความคิดของฉัน AOP เป็นความคิดมากกว่าความคิดที่สามารถเคลื่อนย้ายและเชื่อมต่อทั้งร่างกายได้ AOP เผชิญกับโปรแกรมโปรแกรมที่เขียนโดยฟังก์ชั่นความยินยอมหรือกระบวนการโทรมากขึ้น จากแง่มุมแรกซึ่งหมายถึงแง่มุมหนึ่งเรายังสามารถเข้าใจได้ว่าวิธีนี้คือการใช้แง่มุมหนึ่ง นี่คือสิ่งที่คล้ายกับไฟล์ทั่วโลกใน MVC และยังเป็นส่วนสำคัญของกรอบฤดูใบไม้ผลิ มันเป็นกระบวนทัศน์อนุพันธ์ของการเขียนโปรแกรมที่ใช้งานได้ ส่วนต่าง ๆ ของตรรกะทางธุรกิจสามารถแยกได้โดยใช้ AOP ซึ่งจะช่วยลดการมีเพศสัมพันธ์ระหว่างส่วนต่าง ๆ ของตรรกะทางธุรกิจการปรับปรุงความสามารถในการใช้ซ้ำของโปรแกรมและปรับปรุงประสิทธิภาพของการพัฒนา
ประการที่สองลักษณะการรวบรวมล่วงหน้าของมันสามารถจัดการกับข้อผิดพลาดบางอย่างได้ดีหรืออคติสถานการณ์บางอย่างซึ่งนำไปสู่การกลายเป็นเรื่องธรรมดามากขึ้นในการตัดสินการอนุญาตและผลผลิตแบบครบวงจรของบางสิ่งบางอย่างเมื่อออกแบบ "เทคโนโลยีสามารถทำได้ด้วยวิธีการ precompilation และพร็อกซ์แบบไดนามิกในระหว่างการรันไทม์เพื่อเพิ่มฟังก์ชั่นแบบไดนามิกให้กับโปรแกรมโดยไม่ต้องปรับเปลี่ยนซอร์สโค้ด AOP เป็นความต่อเนื่องของรูปแบบการออกแบบ GOF ประโยคข้างต้นยังเป็นการตีความที่ดีของ AOP
2. การใช้งานใน MVC
ต้องพูดมากลองมาดูกันเถอะ ก่อนอื่นเราต้องสร้างโครงการ MVC ใหม่ใน VS. เลือก MVC3 หรือ 4 และมันก็โอเคจากนั้นสร้างคอนโทรลเลอร์ตั้งชื่อตามความประสงค์แล้วสร้างมุมมองและเขียน HelloWorld ที่ง่ายที่สุดในมุมมอง
<! doctype html> <html> <head> <mhet> <dite> ดัชนี </title> </head> <body> <div> <a> สวัสดี! โลก </a> </div> </body> </html>
รูปภาพทางด้านขวาแสดงโซลูชัน MVC ที่ฉันสร้างขึ้นคอนโทรลเลอร์ที่เพิ่มเข้ามาและมุมมอง เขียนรหัสด้านบนในมุมมองเพื่อแสดงสวัสดี! โลก.
หลังจากทำงาน (ไม่ได้ผล) คำว่า HelloWorld จะปรากฏบนหน้าเว็บหรือไม่?
ตกลงต่อไปเราเริ่มสร้างไฟล์ AOP ใหม่แล้วใช้ ก่อนอื่นให้เพิ่มคลาสใหม่ในโครงการนี้ที่เรียกว่า FilterPublic เพิ่มการอ้างอิงโดยใช้ System.web.mvc ในการอ้างอิงจากนั้นให้คลาสนี้สืบทอดจาก ActionFilterAttribute ทุกคนควรให้ความสนใจกับคำว่าการกระทำซึ่งหมายความว่าสิ่งนี้ขึ้นอยู่กับการกระทำ
จากนั้นเราเขียนรหัสต่อไปนี้:
ข้อความสตริงสาธารณะ {รับ; ชุด; } การแทนที่เป็นโมฆะ onactionExecuting (ActionExecutingContext FilterContext) {base.onactionExecuting (FilterContext); FilterContext.httpContext.response.write ("ก่อนการดำเนินการดำเนินการ" + ข้อความ + "<br />"); } การแทนที่สาธารณะเป็นโมฆะ onActionExecuted (ActionExecutedCutcontext FilterContext) {base.onactionExecuted (FilterContext); FilterContext.httpContext.response.write ("หลังจากการดำเนินการของการกระทำ" + ข้อความ + "<br />"); } การแทนที่เป็นโมฆะ onResultExecuting (resultExecutingContext FilterContext) {base.onresultExecuting (FilterContext); FilterContext.httpContext.response.write ("ส่งคืนก่อนผลลัพธ์" + ข้อความ + "<br />"); } การแทนที่สาธารณะเป็นโมฆะ onResultExecuted (resultExecutedCutContext FilterContext) {base.onresultexecuted (FilterContext); FilterContext.httpContext.response.write ("ส่งคืนหลังจากผลลัพธ์" + ข้อความ + "<br />"); -นี่คือการกระทำต่าง ๆ ที่เกิดจากตัวกรองจากนั้นเราทำการปรับเปลี่ยนวิธีการเริ่มต้นต่อไปนี้ในคอนโทรลเลอร์:
[<span style = "ตัวอักษรขนาด: 18px;"> filterpublic </span> (message = "action")] public actionresult index () {httpcontext.response.write ("การดำเนินการ ・・ <br />"); ส่งคืนเนื้อหา ("ผลลัพธ์ ・・ <br />"); - จากนั้นเพิ่มประโยค [FilterPublic (message = "controller")] บนคลาสคลาสของคอนโทรลเลอร์แล้วเรียกใช้ จะเกิดอะไรขึ้น?
การดำเนินการก่อนที่การดำเนินการดำเนินการจะดำเนินการ ・・・ หลังจากผลการดำเนินการส่งคืนการดำเนินการก่อนการดำเนินการดำเนินการจะส่งคืนผลลัพธ์ ・・・ หลังจากผลการส่งคืนหลังจากการส่งคืน
คุณจะเห็นได้ว่าก่อนที่วิธีการในคอนโทรลเลอร์จะถูกดำเนินการก่อนอื่นเราจะเรียกใช้รหัสใน FilterPublic ที่เราตั้งไว้ด้านล่าง และเมื่อการกระทำเกิดขึ้นในเวลาที่ต่างกันเรายังสามารถดูว่าวิธีใดที่ถูกเรียกใช้
อย่างไรก็ตามวิธีการที่ใช้คอนโทรลเลอร์ที่เขียนบนคอนโทรลเลอร์ไม่ได้ทริกเกอร์ ทำไมถึงเป็นเช่นนี้?
ในความเป็นจริงปัญหานี้ง่ายมาก เมื่อเราตั้งค่าโปรแกรม AOP ของเราเราไม่ได้ตั้งค่าพารามิเตอร์และไม่อนุญาตให้ตัวกรองซ้อนทับ ในเวลานี้เราเพิ่งเพิ่ม: [attributeUsage (attributeTargets. ทั้งหมด, allowMultiple = true)] ไปยังคลาส FilterPublic ที่คุณเขียนและเราสามารถเรียกใช้ตัวกรองหรือตัวกรองซ้อนทับต่างๆ ในเวลานี้ลองวิ่ง:
คอนโทรลเลอร์ก่อนดำเนินการดำเนินการ ดำเนินการดำเนินการ ดำเนินการดำเนินการ หลังจากดำเนินการ ดำเนินการดำเนินการ หลังจากดำเนินการ คอนโทรลเลอร์ส่งคืนก่อนผลลัพธ์ คอนโทรลเลอร์ส่งคืนก่อนผลลัพธ์ การดำเนินการกลับมาหลังจากผลลัพธ์ การดำเนินการกลับมาหลังจากผลลัพธ์ คอนโทรลเลอร์ส่งคืนหลังจากผลลัพธ์
ด้วยวิธีนี้ตัวกรองบนคอนโทรลเลอร์จะถูกเรียกใช้เช่นกันดังนั้นเมื่อเราใช้วิธี AOP เราจะต้องเขียนแท็กคลาสตัวกรองด้วยวิธีการเขียนของเราเองหรือวิธีการโหลดเริ่มต้นของหน้า
ดังนั้นหากเรามีฟังก์ชั่นที่ต้องใช้ทุกหน้าเพื่อเรียกใช้มันจะไม่ลำบากหรือไม่? ไม่ต้องกังวลถึงเวลาที่เราจะทำงานในเวลานี้ เพียงลงทะเบียนตัวกรองที่คุณเขียนภายใต้เมธอด registerglobalfilters ภายใต้ไฟล์ global.asax:
โมฆะสาธารณะคงที่ registerglobalfilters (ตัวกรอง GlobalFilterCollection) {filters.add (HandleerRorattribute ใหม่ ()); // กำหนดตัวกรองของคุณเองเป็นตัวกรองทั่วโลก ADD (ใหม่ <span style = "font-size: 18px;"> filterpublic </span> () {message = "global <br/>"}); -จากนั้นเรียกใช้และดูผลลัพธ์:
การดำเนินการก่อนการดำเนินการทั่วโลกการดำเนินการก่อนการดำเนินการควบคุมการดำเนินการก่อนดำเนินการดำเนินการก่อนการดำเนินการดำเนินการจะดำเนินการ ・・・ หลังจากการดำเนินการหลังจากดำเนินการดำเนินการหลังจากดำเนินการควบคุมการดำเนินการหลังจากการดำเนินการผลตอบแทนทั่วโลกก่อนผลการส่งคืนทั่วโลก
ด้วยวิธีนี้ทริกเกอร์ทั่วโลกจะทำ (ข้อความในตัวกรองใช้เพื่อระบุลำดับชั้นเท่านั้นและไม่สามารถกำหนดได้เมื่อใช้อย่างเป็นทางการ)
จากมุมมองนี้หากคุณต้องการเพิ่มวิธีการทั่วโลกอย่างรวดเร็วคุณเพียงแค่ต้องสร้างตัวกรองใหม่แล้วเปลี่ยนไฟล์ทั่วโลก ไม่สะดวกมากเหรอ?
ข้างต้นเป็นงานวิจัยสั้น ๆ ของฉันเกี่ยวกับ AOP หากมีข้อผิดพลาดใด ๆ โปรดแก้ไขฉัน
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!