Pull to refresh

Несколько полезных аспектов для PostSharp

.NET *
В .net-е есть несколько серьезных AOP-фреймворков, но ни один их них не «рулит» так как PostSharp. Будучи большим фанатом (а также пользователем) сего фреймворка, хочу представить сообществу несколько «рецептов». Некоторые из них я создал сам, другие нашел в интернете и адаптировал под свои нужды. Тут я покажу несколько самых «сочных» рецептов. А если вы не знакомы с фреймворком или идеологией AOP, могу порекоммендовать вот этот вебкаст. Итак, начнем?

Читать дальше →
Total votes 26: ↑18 and ↓8 +10
Views 11K
Comments 34

Аспектно-ориентированное программирование. PostSharp

.NET *
Sandbox
Аспектно-ориентированное программирование

АОП — парадигма программирования, в основе которой лежит идея выделения сквозной функциональсти в отдельные сущности — аспекты (aspects). Сквозной называют функциональсть, рассредоточенную по разным частям программы. В качестве примеров сквозной функциональности можно привести задачи логирования, трассировки, обработки исключений, проверки пред- и постусловий в контрактном программировании и проверки прав доступа. АОП может так же использоваться для решения задач защиты и многопоточности.

PostSharp

Фреймворк PostSharp — это реализация аспектно-ориентированного подхода для .NET. PostSharp в отличие от многих своих аналогов работает как пост-компилятор, то есть он вносит изменения в MSIL (Microsoft Intermediate Language).
PostSharp позволяет легко создавать атрибуты, которые меняют поведение методов, полей и типов. Для этого нужно унаследовать класс атрибута от одного из предоставляемых библиотекой базовых классов, реализовать его виртуальные методы и применить этот атрибут.
Читать дальше →
Total votes 50: ↑40 and ↓10 +30
Views 11K
Comments 24

Знакомство с АОП

Programming *

Парадигмы программирования


В современном мире IT-разработки существует довольно большое множество различных подходов к написанию программ. Так, например, кому-то нравиться представлять программу в виде последовательности действий, а кто-то считает, что программа должна представлять собой множество объектов, общающихся друг с другом. Совокупности этих идей и понятий образуют своего рода стиль написания программы, который принято назвать – парадигма программирования.

У каждой парадигмы есть свои особенности, однако, главным фактором, различающим их, является понятие основной единицы программы. Вот самые популярные из них:
  • инструкция (императивное программирование, FORTRAN/C/PHP),
  • функция (функциональное программирование, Haskell/Lisp/F#/Scala),
  • прототип (прототипное программирование, JavaScript),
  • объект (объектно-ориентированное программирование, С++/Java),
  • факт (логическое программирование, PROLOG).

Стоит заметить, что в общем случае язык программирования однозначно не определяет используемую парадигму: на том же PHP можно писать как императивные, так и объектно-ориентированные программы.

В этой статье я хочу рассказать о сравнительно молодой, но крайне, на мой взгляд, полезной парадигме программирования – аспектно-ориентированном программировании.

Читать дальше →
Total votes 105: ↑101 and ↓4 +97
Views 116K
Comments 70

PostSharp. Аспектно-ориентированное программирование vs Dependency Injection

.NET *
Translation
В моем разговоре с Андресом Хейлсбергом о страхах, неуверенности и сомнений относительно Аспектно-Ориентированного программирования я упомянул про общую путаницу и непонимание что АОП и DI – это конкурирующие концепции. В этой статье я попробую объяснить вам обо всех различиях и сходствах в этих двух подходах.Недавно я прекрасно провел время за чтением статьи Дино Эспосито: «Аспектно-ориентированное программирование, interception и unity 2.0», в декабрьском номере MSDN Magazine. Это великолепная статья и я настоятельно советую любому разработчику, вовлеченному в .NET разработку прочитать ее полностью. Как и многие DI фреймворки, и некоторые основные фреймворки (WCF, ASP.NET MVC), Unity предлагает похожую на АОП возможность: interceptors.
Читать дальше →
Total votes 34: ↑25 and ↓9 +16
Views 5.9K
Comments 23

Мой опыт с AOP и PostSharp

.NET *
Давным-давно я достаточно хорошо исследовал PostSharp и даже начал использовать его в своих разработческих целях. Умудрился даже написать скринкаст и пару-тройку статей на эту тему. К сожалению, с PostSharp’ом у меня в последствии совсем не сложилось и, по причинам периодических воспросов со стороны комьюнити на тему “как? почему?”, я решил написать этот пост чтобы расставить все точки над i.
Читать дальше →
Total votes 36: ↑29 and ↓7 +22
Views 11K
Comments 13

Postsharp. Решаем задачу кэширования

.NET *C# *
Translation
Иногда попадаются такие ситуации, в которых нет никакой возможности ускорить работу некоторой операции. Она может зависеть от какого-то сервиса, который располагается на внешнем web сервере, или это может быть операция, которая дает высокую нагрузку на процессор. Или же это могут быть быстрые операции, однако, их параллельная работа может высосать из вашего компьютера все ресурсы производительности. Существует огромное количество причин чтобы использовать кэширование. Следует отметить, что PostSharp, изначально не предоставляет решений для вас какого-либо фреймворка кэширования, просто он позволяет сделать эту задачу на порядки быстрее, без каких-либо занудных действий, типа расстановки кода, отвечающего за кэширование по всему исходному тексту программы. Он позволяет решить эту задачу элегантно, вынося задачи в классы и позволяя их повторно использовать.
Читать дальше →
Total votes 14: ↑8 and ↓6 +2
Views 2.5K
Comments 11

PostSharp. Решение задач логгирования и аудита

.NET *
Translation
И снова здравствуйте! В прошлый раз при обсуждении АОП, мы с вами говорили о решении задач кэширования. Сегодня мы поговорим о не менее часто встречающейся задаче – задаче логгирования и аудита. Нам часто приходится сталкиваться с такими ситуациями, как, например, анализ чужого кода. Представьте себе, что вам дали задачу интеграции с библиотекой стороннего производителя. Основной инструментарий чуть ли не каждого разработчика — .net reflector, ILSpy, dotPeek дают отличное представление о коде программы. О ее алгоритмах, структуре, возможных местах ошибок. И покрывают большой процент вопросов к программному продукту. Однако так происходит до тех пор, пока вы не начинаете ее активно использовать. Тут могут возникнуть как проблемы с производительностью, так и с непонятными «багами» внутри стороннего продукта, которые, если не иметь дизассемблера с функцией отладчика, не так-то просто найти. Или, например, вам необходимо просто следить за значениями переменных, не останавливая продукт в точках останова, real-time. Такие места часто необходимо срочно и быстро исправлять. А как при исправлении этого кода не написать программу, которая потом будет в топе сайта govnokod.ru? О таких ситуациях мы сейчас и поговорим.
Читать дальше →
Total votes 23: ↑16 and ↓7 +9
Views 4.8K
Comments 9

PostSharp. Отложенная загрузка зависимостей

.NET *
Translation
Кусок кода, представленный ниже, вы наверняка писали не один раз. А что более вероятно – десятки раз. Обычно это пишется, когда необходимо использовать некий репозиторий, который будет предоставлять данные для вашего приложения. Если у вас мало времени, и вы торопитесь, это отличный способ получить что-либо таким образом, что это будет загружено в память только тогда, когда это вам понадобится, но не раньше (например, операция сохранения повлекла за собой обращение к подсистеме сериализации, однако до этого она не была нужна). И ведь на самом деле получается, что этот кусок кода с одной стороны одинаков, а с другой – его приходится писать не один раз.
Как правило, я и многие программисты, предпочитаем использовать в данном месте IoC контейнер, чтобы решать задачи такого рода. Однако это не всегда так просто сделать, особенно когда я программирую в рамках отсутствия Dependency Injection в библиотеке, которую я использую (WinForms, WebForms, …). Давайте разберемся, почему решая эту задачу без использования PostSharp, вы потратите гораздо больше времени и проделаете больше работы.
Читать дальше →
Total votes 12: ↑8 and ↓4 +4
Views 1.8K
Comments 13

Postsharp: авторизация и аутентификация

.NET *
Translation
Одно из самых востребованных применений аспектно-ориентированного программирования это вынос обслуживающего инфраструктурного кода, который часто повторяется в системе, в отдельный класс. Что в свою очередь является проявленем принципа единой ответственности (SRP — Single Responsibility Principle). Очень часто задачи авторизации и аутентификации разбросаны по всему коду проверяя права доступа пользователя. Следствием этого является большая трудоемкость изменений в этой немаловажной части логики, а так же ее общая проверка. Принцип единой ответственности говорит о том, что должна быть только одна причина для изменения класса, так что все что относится к авторизации и аутентификации просто просится в отдельные классы.

Основные методы аутентификации обычно не то, что используется по всему приложению. Например в веб приложениях ввод данных для аутентификации и сама аутентификация происходит на одной странице, после чего информация о пользователе хранится в каком-либо токене со сроком годности. Благодаря этому пользователь может автоматически входить в систему в течении срока работы токена. Таким образом единственным кодом, который пронизывает все страницы приложения будет проверка того, что пользователь до сих пор в системе. Конечно, вы можете использовать PostSharp для такой проверки, но это не лучший способ применения, по моему мнению.

Читать дальше →
Total votes 12: ↑9 and ↓3 +6
Views 1.5K
Comments 0

PostSharp. Менеджмент транзакций

.NET *
Translation
imageКогда в последний раз я консультировал одну компанию, мы обсуждали внутренний SOA фреймворк, который должен взаимодействовать с базами данных предприятия. Этот фреймворк был SOA только разве что по названию, полностью доморощенный, и что самое грустное, он был «любимым проектом» начальника отдела ИТ. Он был не безопасным и построен на сомнительных технологиях и решениях. В общем он был сделан для решения некоторой проблемы, которой либо не существует, либо она не могла была разрешима боле простыми средствами. Моя команда была крайне разочарована структурой этого фреймворка. Но, в качестве консультанта, очень часто приходится сначала продумать пути решения проблемы, нельзя порсто сказать заказчику что его продукт «плохой», необходимо сначала построить его доверие к себе, и только потом решать более серъезные проблемы. Так или иначе такой процесс может занять годы, и все зависит от фирмы, в которой будут происходить такого рода изменения. Тогда я и задумался над тем чтобы начать использовать аспектно-ориентированный фреймворк чтобы решить эту проблему
Читать дальше →
Total votes 5: ↑2 and ↓3 -1
Views 982
Comments 0

Вышла в свет новая версия PostSharp RC 1

.NET *
Итак, доступна для скачивания новая версия продукта – релиз кандидат PostSharp 2.1, с нашего веб-сайта и с репозитория NuGet.

PostSharp 2.1  — это незначительное обновление PostSharp 2.0. Причина выхода этой версии в основном – правка некоторых ошибок, которые мы допустили в разработке предыдущей версии.

Релиз-кандидат обещает быть высококачественным продуктом, который практически не содержит ошибок, которые нам известны и необходимо чтобы он был протестирован обществом прежде чем он будет помечен как стабильный и выпущен как релиз. Также была проделана работа над обновлением документации. Так что теперь она отражает весь функционал продукта.
Читать дальше →
Total votes 4: ↑4 and ↓0 +4
Views 945
Comments 6

Ликвидатор велосипедов: повторно используемый код

.NET *
Всем привет! Помните, когда-то давным давно была хорошая серия статей? Так вот я хочу ее продолжить. Однако на этот раз я не буду рассматривать огромное множество библиотек, которые решают повсеместно-возникающие проблемы, а рассмотрю всего лишь одну, но способную решить огромную кипу проблем. Мне кажется каждый из вас когда-то писал строчки вида:

void SomeMethod(IEmployee lazyguy)
{
    if(lazyguy == null) throw new ArgumentException(“lazyguy”);
    // Do something with lazy guy. Fire him, for example.
}


Кто-то пытался превратить это в:

void SomeMethod(IEmployee lazyguy)
{
    UniversalValidator.CheckNotNull(lazyguy);
    // Meet with him and talk about motivations
}


Кто-то превращал это во что-то похожее. Однако у всех, я могу поспорить, оставался осадок что что-то тут не так. Красивее было бы как-то по другому. А что в итоге? Огромное количество велосипедов с квадратными колесами! Как сделать по-другому?
Читать дальше →
Total votes 21: ↑13 and ↓8 +5
Views 1.8K
Comments 8

С# 6, Roslyn, умные дома и контроль дизайна приложений на онлайн встрече DevLabs

Luxoft corporate blog .NET *C# *
Что является главным на любой конференции для разработчиков? На мой взгляд любую конференцию определяют не организаторы, не помещение и даже не наличие обедов. Их прежде всего определяют люди и те доклады, которые они делают. Ведь при годных и интересных докладах остальное уходит на второй план =) Потому, при проектировании очередной онлайн встречи разработчиков .Net мы крайне ответственно подошли к вопросу выбора спикеров и тем. В перенасыщенную конференциями, осень, мы рады представить онлайн-конференцию по вопросам разработки на платформе .Net.

Что будет? Три НЕ разжеванные вдоль и поперек, темы. Онлайн-конференция, на которую можно сходить бесплатно, из любого города. И послушать про новый язык C#6, Roslyn и историю его эволюции, про возможность сделать умный дом привычными для .Net разработчика, средствами и про автоматическую проверку нарушений дизайна приложений при помощи зарекомендовавшего себя годами, продукта PostSharp, который совсем недавно обжился новыми функциями и поддержал кросс-платформенную разработку с Xamarin

Я рекомендую пройти под кат (либо напрямую к нам в DevLabs) и ознакомиться со спикерами и темами докладов более подробно и записаться. Ведь несколько часов экспертного мнения никогда не повредят.

Онлайн-встреча будет проводиться: 20 декабря, в субботу, с 11:00 до 15:30

Видеозаписи всех докладов будут доступны для зарегистрировавшихся участников в течение недели после мероприятия
Списки статей спикеров и информация по темам докладов
Total votes 23: ↑22 and ↓1 +21
Views 15K
Comments 7

Patterns Don't Stop at Design — Be a Pattern-Driven Team

Self Promo


Всем привет!

В начале марта с 11 по 17 число, Гаэль Фрэтёр (Gael Fraiteur) приезжает в Россию и хочет провести мастер-классы и вечерние беседы в Москве и Питере. Гаэль известен как человек хорошо разбирающийся в недрах .NET и с большим опытом в сфере аспектно-ориентированного программирования. Мероприятия бесплатные, но требуется регистрация.

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

Москва:


Питер:


Я надеюсь, что .NET сообществу это будет интересно.

Читать дальше →
Total votes 20: ↑17 and ↓3 +14
Views 2.1K
Comments 11

MS Dynamics CRM и PostSharp

CRM systems *
Приветствую, Уважаемые Хаброчитатели

В данной статье хочу поведать о результатах моих исследований относительно применимости PostSharp к MS Dynamics CRM в плане логирования.
Читать дальше →
Total votes 5: ↑4 and ↓1 +3
Views 4K
Comments 3