MVC AOP -ориентированное программирование
Я полагаю, что все не подвергались слову AOP, но на самом деле вы уже подвергались ему, только в режиме проектирования. Идея, используемая AOP, на самом деле такая же, как шаблон проектирования, то есть функции добавляются или изменяются без изменения исходного кода. Кроме того, AOP в основном используется весной, но то, что написано в этой статье, используется только в MVC, так что будьте осторожны.
1. Введение
Так называемый AOP (аббревиатура ориентированного на аспект) означает технологию, которая реализует единое обслуживание функций программы посредством методов предварительного спуска и динамических агентов во время выполнения. AOP - это продолжение ООП, горячая тема в разработке программного обеспечения, важная часть Spring Framework и производную парадигму функционального программирования. Различные части бизнес -логики могут быть изолированы с использованием AOP, тем самым уменьшая связь между различными частями бизнес -логики, улучшив возможность повторного использования программы и повышая эффективность развития.
Вышесказанное является официальным объяснением энциклопедии Байду, но, по моему мнению, AOP на самом деле является скорее чем -то вроде мысли, своего рода мысли, которая может двигаться и соединить все тело. AOP фактически сталкивается с большим количеством программного органа, написанного функцией согласия или процессом вызова. Из своего первого аспекта слова, который относится к аспекту, мы также можем понять, что этот метод должен реализовать один аспект. На самом деле это очень похоже на глобальный файл в MVC, а также является важной частью Spring Framework. Это производная парадигма функционального программирования. Различные части бизнес -логики могут быть изолированы с использованием AOP, тем самым уменьшая связь между различными частями бизнес -логики, улучшив возможность повторного использования программы и повышая эффективность развития.
Во -вторых, его предварительный характер может хорошо справиться с некоторыми ошибками или предрассудка, что также приводит к тому, что он становится все более распространенным в оценке разрешений и единой выводе чего -либо при проектировании. «Технология может быть достигнута с помощью методов предварительного спуска и динамического выпуска во время выполнения, чтобы динамически добавлять функции к программам без изменения исходного кода. AOP на самом деле является продолжением шаблона проектирования GOF. Схема проектирования не покладает неутомительно осуществляя развязку между вызывающим абонентом и Callee, повышая гибкость и масштабируемость кода. AOP может быть сказано в реализации этого». Приведенное выше предложение также является хорошей интерпретацией AOP.
2. Реализация в MVC
Сказав так много, давайте посмотрим. Во -первых, нам нужно создать новый проект MVC в VS., выберите MVC3 или 4, и он в порядке, затем создать контроллер, назовите его по желанию, а затем создать его представление и написать самый простой Helloworld в представлении.
<! Doctype html> <html> <head> <title> index </title> </head> <body> <div> <a> Привет! World </a> </div> </body> </html>
На рисунке справа показано созданное решение MVC, добавленное контроллер и представление. Напишите приведенный выше код в представлении, чтобы отобразить Hello! Мир.
После запуска (оно не работает), появляется ли слово Helloworld на веб -странице?
Хорошо, затем мы начинаем создавать новый файл AOP, а затем используем его. Сначала добавьте новый класс в этот проект, называемый FilterPublic, добавьте ссылку с использованием System.Web.mvc в ссылку, а затем позвольте этому классу унаследовать от ActionFilterAttribute. Каждый должен обратить внимание на слово «действие», что означает, что эта вещь основана на действии.
Затем мы пишем следующий код:
public String Message {get; набор; } public override void onActionExeCuting (actionExeCutingContext filterContext) {base.onactionExeCuting (filterContext); filterContext.httpcontext.response.write («До выполнения действия» + сообщение + "<br />"); } public override void onActionExecated (actionExectedContext filterContext) {base.onactionExecated (filterContext); filterContext.httpcontext.response.write ("После выполнения действия" + message + "<br />"); } public override void onResultexeCuting (resultexecutingcontext filterContext) {base.onresultexecuting (filterContext); filterContext.httpcontext.response.write («Возврат перед результатом» + message + "<br />"); } public override void onresultexecated (resultexectedcontext filterContext) {base.onresultexecated (filterContext); filterContext.httpcontext.response.write ("return после результата" + message + "<br />"); }Это различные действия, запускаемые фильтром, а затем вносим следующие изменения в методе по умолчанию в контроллере:
[<span style = "font-size: 18px;"> filterpublic < /span> (message = "action")] public actionResult index () {httpcontext.response.write ("Действие выполняет ・・ <br />"); вернуть контент ("Результат ・・ <br />"); } Затем добавьте предложение [FilterPublic (message = "controller")] в класс класса контроллера, а затем запустите его. Что будет?
Действие перед выполнением выполнения выполнения ・・・ После возвращения результата выполнения до возврата Действия в результате возврата ・・・ после результата возврата после возврата
Вы можете видеть, что до того, как метод в контроллере будет выполнен, мы сначала выполним код в FilterPublic, который мы установили ниже. И по мере того, как действие происходит в разное время, мы также можем увидеть, какой метод запускается.
Тем не менее, метод, основанный на контроллере, записанный на контроллере, не запустил. Почему это?
На самом деле эта проблема очень проста. Когда мы настроили нашу программу AOP, мы не установили параметры и не позволяли наложить фильтры. В настоящее время мы просто добавляем: [attributusage (attributeTargets.all, AllingMultiple = true)] к классу FilterPublic, на который вы написали, и мы можем запустить различные фильтры или наложенные фильтры. В настоящее время давайте попробуем бежать:
Контроллер до выполнения действия. Действие выполнено. Действие выполнено. После выполнения действия. Действие выполнено. После выполнения действия. Контроллер возвращает до результата. Контроллер возвращает до результата. Действие возвращается после результата. Действие возвращается после результата. Контроллер возвращается после результата.
Таким образом, фильтр на контроллере также запускается, поэтому, когда мы используем метод AOP, нам нужно только написать тег класса фильтра на нашем собственном написанном методе или метод загрузки по умолчанию.
Итак, если у нас есть функция, которая требует запуска всех страниц, разве это не было бы проблемой? Не волнуйтесь, наша очередь на работу в это время. Просто зарегистрируйте фильтр, который вы написали в соответствии с методом RegisterGlobalFilters в файле Global.asax:
public static void Registerglobalfilters (GlobalFilterCollection Filters) {filters.Add (new harderRorattribute ()); // Определите свой собственный фильтр как глобальные фильтры. ADD (new <span style = "font-size: 18px;"> filterpublic </span> () {message = "global <br/>"}); }Затем бегите и посмотрите результаты:
Действие перед выполнением Глобальное действие перед действием контроллера выполнения перед выполнением действия до выполнения выполнения действия выполнения ・・・ После действия после выполнения действия после выполнения действий контроллера выполнения после результата возврата Global Resulation до получения результата глобального возврата до возврата контроллера до возврата результата после возврата результата после возврата результата
Таким образом, глобальное запуск выполняется (сообщение в фильтре используется только для определения иерархии, и оно не может быть определена при формальном использовании).)
С этой точки зрения, если вы хотите быстро добавить глобальный метод, вам просто нужно создать новый фильтр, а затем изменить глобальный файл. Разве это не очень удобно?
Вышесказанное - некоторые из моих кратких исследований по AOP. Если есть какие -либо ошибки, поправьте меня.
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!