tgoop.com/fullStackDevs/663
Last Update:
#AOP
🔰AOP
🔹در این پست میخواهیم AOP رو مورد بررسی قرار دهیم.
در توسعه نرم افزار AOP یک مدل توسعه نرم افزار است که برای تکمیل OOP ( برنامه نویسی شی گرا) به وسیله جدا سازی concern ها اپلیکیشن برای رسیدن به ماژولاریتی استفاده میشود.
جداسازی concern ها با دسته بندی feature ها و behavior های اپلیکیشن به بخش های قابل مدیریت که هر کدام هدف خاصی دارن، نگهداری آنرا آسان تر میکند .
البته به کمک OOP امکان modularizing کردن concern ها به متد های مجزا و کلاس ها و package ها وجود دارد.
❇️ Aspect-Oriented Programming (AOP)
🔹یک تکنیک رایج برای ساخت راه کارهایی قابل استفاده در سراسر اپلیکیشن است که در طی توسعه نرم افزار، جداسازی منطق برنامه و تسک های قابل تکرار را تسهیل میکند.
مانند (input validation, logging, error handling, security)
🔸معماری یک اپلیکیشن اگر به خوبی طراحی شده باشد دارای لایه های متفاوت باید باشد و concern های مختلف در این معماری فقط در صورت نیاز باهم در ارتباط باشند.
▪️ فرض کنید یک اپلیکیشن loosely couple و maintainable طراحی کرده اید اما در میان راه نیازمند یه سری موارد هستید که ممکن است، نتوان آنها را در معماری به درستی جایگذاری کرد مانند :
▫️نیازمند سیستم authentication ای هستید برای بررسی احراز هویت کاربر قبل از هر کوئری به دیتا بیس
▫️ یا نیازمند است دیتاها قبل از insert در دیتابیس اعتبار سنجی شوند
▫️اپلیکیشن باید برای عملیات های حساس و مهم logging را انجام دهد.
▫️اپلیکیشن باید دارای یک سیستم debugging log جهت بررسی ok بودن عملیات ها باشد.
▫️اپلیکیشن باید دارای یک سیستم بررسی پرفورمنس باشد تا عملکرد عملیات های اپلیکیشن را بررسی کند.
🔸هر کدام از نیازمند های گفته شده نیازمند حجم زیادی از checking و کد میباشند.
علاوه بر آن امکان code duplication نیز وجود دارد و مجبورید کد های تکراری زیادی را در بخش های مختلف سیستم اضافه کنید. که نقض اصل DRY است و نگهداری اپلیکیشن را سخت میکند.
علاوه بر اینها هر تغییر کوچک در این نیازمندی ها باعث تغییرات عظیم در اپلیکیشن میشود.
🔹مواقعی که مجبور باشیم چنین الزاماتی را به اپلیکیشن خود اضافه کنیم، سوالی پیش می اید :
🔻 "چرا اصلا خود کامپایلر نمیتواند این کدهایی که در جاهای مختلف تکرار میشوند را اضافه کند ؟"
خبر خوب این است که چیزی به نام "aspect-oriented programming (AOP)" وجود دارد که general کد ها را از aspect ها در سراسر boundary های یک آبجکت یا یک لایه جدا میکند.
برای مثال logging در اپلیکیشن، وابسته به هیچ یک از لایه های اپلیکیشن نیست، بلکه باید در سراسر اپلیکیشن وجود داشته باشد و در همه جای برنامه بتوان آنرا اضافه کرد.
🔹از مزیت های AOP این است که فقط نیاز است نگران یک جای کد باشید. در یک جا کد بنویسید و آنرا در هرجایی که نیاز است اعمال کنید.
❇️ موارد استفاده از AOP بسیار زیاد است مانند :
▫️پیاده سازی logging در اپلیکیشن
▫️استفاده از authentication قبل از یک عملیات (اجازه دسترسی به کاربرانی که احراز هویت شده اند)
▫️پیاده سازی اعتبار سنجی و همچنین پیاده سازی سیستم اعلانی که با تغییر مقدار یک پراپرتی ایونتی را raise میکند.
▫️تغییر رفتار برخی متد ها.
🔸همانطور که میبینید AOP کاربرد های فراوانی دارد اما باید با احتیاط از آن استفاده کنید.
چون استفاده از آن برخی کد ها را در حالی که وجود دارند Hide میکند. همچنین aspect ها میتواند دارای باگی باشند یا تاثیر بسزایی در پرفورمنس اپلیکیشن داشته باشد. هزینه یک باگ جزئی در یک aspect ممکن است ساعت ها دیباگ کردن باشد. در نتیجه اگر aspect تان در جاهای دیگری ار اپلیکیشن استفاده نمیشود بهتر است مستقیما آنرا وارد کدتان کنید.
@fullStackDevs
BY Web Devs
Share with your friend now:
tgoop.com/fullStackDevs/663