LinFu AOP и LinFu IOC вводный экскурс часть первая

Зачастую при работе с БД (да и не только), особенно при использовании какого-нибудь ОРМ, возникает задача упрощения тех или иных процедур, которые приходится вызывать очень часто(к примеру открытие транзакции и её коммит, запросы с NOLOCK или банальный препроцессинг данных). Конечно все можно сделать по-старинке:


Но «Шурик, это же не наш метод!»®. Потому мы пойдем дальше и воспользуемся более гуманными средствами а именно AOP и IOC (что это такое и с чем его едят вы можете почитать в интернете, потому не вижу смысла описывать это здесь)

До некоторых пор я использовал Unity, но что-то разонравилось мне оно и я решил его(её) сменить. Альтернативных вариантов много (Spring.Net AOP, Castle, PostSharp, Aspect#, LinFu и т.д.). Мой выбор пал на LinFu уж больно часто о нем упоминается на безграничных просторах интернета. В данном экскурсе я рассмотрю простой пример реализации транзакций при использовании NHibernate, ну и если будут многочисленные просьбы трудящихся продолжу в следующих.

Итак приступим.

Для начала скачиваем необходимые библиотеки Здесь

Открываем студию, создаем проект и добавляем необходимые ссылки на наши библиотеки (NHibernate, LinFu ну и что вы там еще собираетесь использовать), создаем объекты БД и маппинги к ним и DAO. Это я думаю вы и так умеете. Для удобства я создал базовый класс для DAO:

И соответственно наследуем все DAO от него. И вот все готово можно приступать. дабы код смотрелся симпатичнее и гуманнее мы воспользуемся атрибутами. Сперва создаем базовый атрибут для перехвата:

IInvokeWrapper и IInterceptor — это интерфейсы линфу для перехвата вызываемых методов.

NB. Выбрать надо один из методов. не надо использовать оба — дальше поймете почему.

теперь собственно атрибут перехватчик:

ну и сами перехватчики:

Или вот так если вы выбрали второй метод.

Эти два класса были упрощены: не надо привязываться к конкретному классу, лучше сделать получении Сессии через рефлексию. Я думаю тут комментарии излишни ибо названия методов говорят за себя.

Ну вот теперь у нас готовы атрибуты и их можно расставить над нужными методами. На этом я наверное закончу первую часть ибо дальше мы уже перейдем непосредственно вглубь этого безобразия, а это заслуживает отдельной статьи. А вы пока можете выполнить вышеописанные действия.


Похожие записи:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля отмечены *