Зачем нужен PostSharp?
От: Аноним  
Дата: 10.08.10 22:57
Оценка:
В целях повышения квалификации пытался понять зачем нужен PostSharp. Понял, что простым способом можно добавить к методу код, который вызовется до его исполнения, после исполнения и в случае возникновения ошибки. Но не понял зачем это нужно и какая практическая выгода от этих движений?

Кто может объяснить на простом практическом примере?
Re: Aspect-oriented programming
От: ylem  
Дата: 10.08.10 23:13
Оценка:
http://en.wikipedia.org/wiki/Aspect-oriented_programming
Re[2]: Aspect-oriented programming
От: Аноним  
Дата: 11.08.10 01:26
Оценка:
Здравствуйте, ylem, Вы писали:

Y>http://en.wikipedia.org/wiki/Aspect-oriented_programming


А кто может объяснить вкратце, пока не знаю стоит ли вникать в это все?
Re[3]: Aspect-oriented programming
От: Aen Sidhe Россия Просто блог
Дата: 11.08.10 07:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, ylem, Вы писали:


Y>>http://en.wikipedia.org/wiki/Aspect-oriented_programming


А>А кто может объяснить вкратце, пока не знаю стоит ли вникать в это все?


Логи, счётчики ссылок, кеширование — без написания кода вручную.
С уважением, Анатолий Попов.
ICQ: 995-908
Re: Зачем нужен PostSharp?
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 11.08.10 07:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В целях повышения квалификации пытался понять зачем нужен PostSharp. Понял, что простым способом можно добавить к методу код, который вызовется до его исполнения, после исполнения и в случае возникновения ошибки. Но не понял зачем это нужно и какая практическая выгода от этих движений?


А>Кто может объяснить на простом практическом примере?


Если честно, то я не часто слышал о применении PostSharp в production коде, но в одном из наших проектов он таки применяется, в частности для упрощения реализации интерфейса INotifyPropertyChanged для определенного набора классов. У нас немного другая реализация, но общую идею, как это сделать с помощью PostSharp-а можно почитать здесь: AOP Implementation of INotifyPropertyChanged

Другим примером может служить использование техники проектированя по контракту для проверки предусловий и постусловий (DesignByContract postsharp-user-plugins). При наличии библиотеки Code Contracts — это может быть и не столь актуально, но в качестве примера использования подходит замечательно.
Re[2]: Зачем нужен PostSharp?
От: skodnik  
Дата: 11.08.10 14:27
Оценка:
Здравствуйте, SergeyT., Вы писали:


ST>но в одном из наших проектов он таки применяется, в частности для упрощения реализации интерфейса INotifyPropertyChanged для определенного набора классов.


по ссылке нашел такую фразу:

In this step, we transform our base class 'NotifyingObject' into an Aspect.


Трансформация некоего класса в аспект — это общепринятая фраза? А где можно почитать про эту операцию (с примерами) подробнее?
Re[3]: Зачем нужен PostSharp?
От: _novice_  
Дата: 11.08.10 15:08
Оценка:
Здравствуйте, skodnik, Вы писали:


S>Трансформация некоего класса в аспект — это общепринятая фраза? А где можно почитать про эту операцию (с примерами) подробнее?


Можно например написать аспекты-атрибуты, которые позволяют декларативно
задать ограничения на параметры методов и на свойства классов.

void DoSomething([InRange(1, 200)] int age, 
                 [NotNullNotEmpty] string name, 
                 [Match("^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$")] string email) 
{
}

Эти ограничения буду автоматом проверяться в runtim'e.
Re[4]: Зачем нужен PostSharp?
От: skodnik  
Дата: 12.08.10 07:19
Оценка:
Здравствуйте, _novice_, Вы писали:

__>Здравствуйте, skodnik, Вы писали:



S>>Трансформация некоего класса в аспект — это общепринятая фраза? А где можно почитать про эту операцию (с примерами) подробнее?


__>Можно например написать аспекты-атрибуты, которые позволяют декларативно

__>задать ограничения на параметры методов и на свойства классов.

__>
__>void DoSomething([InRange(1, 200)] int age, 
__>                 [NotNullNotEmpty] string name, 
__>                 [Match("^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$")] string email) 
__>{
__>}
__>

__>Эти ограничения буду автоматом проверяться в runtim'e.

Мне этого реально нехватало ранее.
И что в рантайме эксепшены будут генериться?
Где вообще об этом почитать?
Re[5]: Зачем нужен PostSharp?
От: _novice_  
Дата: 12.08.10 07:44
Оценка:
Здравствуйте, skodnik, Вы писали:

__>>
__>>void DoSomething([InRange(1, 200)] int age, 
__>>                 [NotNullNotEmpty] string name, 
__>>                 [Match("^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$")] string email) 
__>>{
__>>}
__>>


S>И что в рантайме эксепшены будут генериться?

Ещё как будут!

S>Где вообще об этом почитать?

Как где?! Погугли по слову PostSharp — море информации.
Re: Зачем нужен PostSharp?
От: midcyber
Дата: 13.08.10 02:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Кто может объяснить на простом практическом примере?


Аспекты вводят как-бы дополнительное измерение пространства в архитектуру.
Самый простейший (и излюбленный) пример PostSharp — логгирование.
Без него, тебе бы пришлось в каждом методе писать код, не имеющий отношения к бизнес-логике:

void DoSomething(SomeClass obj)
{
  Console.WriteLine("Enter DoSomething");
  // ... код
  Console.WriteLine("Exit DoSomething");
}


А так ты выносишь логгирование в другую плоскость.
http://www.sharpcrafters.com/postsharp/documentation/getting-started
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.