poniedziałek, 9 czerwca 2008

Przeniesienie bloga

Niniejszym obwieszczam wszystkim tego bloga czytającym (o ile są takowi), że tutaj już więcej niczego nie napiszę. Bo tak i już :). Przeniosłem się na serwis www.zine.net.pl - a dokładnie pod adres www.zine.net.pl/blogs/jakubin. See you there!

sobota, 31 maja 2008

PostSharp 1.0 RC3 wydany

Postsharp to bardzo ciekawy framework (biblioteka, mechanizm?) pozwalający zrealizować programowanie aspektowe (AOP) w .NET. Jako, że jeden przykład wart jest tysiąca słów - oto przykładowy aspekt pozwalający wywołać metodę w transakcji (opakować wywołanie metody za pomocą TransactionScope):

[Serializable]
public class TransactionScopeAttribute: OnMethodInvocationAspect
{
public override void OnInvocation(MethodInvocationEventArgs eventArgs)
{
using (var ts = new TransactionScope())
{
eventArgs.Proceed();
ts.Complete();
}
}
}


Oraz jego zastosowanie w praktyce:


class Program
{
static void Main(string[] args)
{
MyDbMethod();
}

[TransactionScope]
private static void MyDbMethod()
{
//...
}
}



Jego największą przewagą nad innymi rozwiązaniami (Policy Injection Application Block, AOP w Spring.net, itp.) jest fakt, że pozwala przechwycić praktycznie każdą metodę - nie wymaga, aby klasa implementowała interfejs, czy też dziedziczyła po MarshalByRefObject. Co więcej, umożliwia przechwytywanie wywołań konstruktorów, metod statycznych, prywatnych, itp. Tak szerokie możliwości wynikają z odmiennego mechanizmu działania. PostSharp po wygenerowaniu assembly modyfikuje kod IL wszystkich przechwytywanych metod, tak aby umożliwić przechwycenie wywołania.



Warto zaznaczyć, że framework jest darmowy i ma otwarty kod źródłowy (na licencji GPL/LGPL v3).



Wiecej informacji na stronie projektu.



PS. Zgodnie z informacją na blogu, PostSharp będzie prezentowany na CodeCamp 7 czerwca w Krakowie. Uważam, że tej prezentacji nie można przegapić!

poniedziałek, 19 maja 2008

Finalny Enterprise Library 4.0

Już od 4 dni dostępne jest finalne wydanie Enterprise Library 4.0. Bibliotekę można pobrać ze strony (wymaga rejestracji), dokumentacja dostępna jest na MSDN.

Nowości względem wersji 3.1:

  • Nowy blok - Unity Application Block. Jest to lekka i rozszerzalna implementacja kontenera Dependency Injection.
  • Wszystkie assembly są oznaczone jako Allow Partially-Trusted Callers (APTCA), dzięki czemu Enterprise Library może być wykorzystywany przez kod "częściowo zaufany". Jest to bardzo przydatne w środowiskach hostowanych - aktualnie można bezpośrednio wykorzystać dostarczone podpisane assembly bez konieczności własnej rekompilacji.
  • W Policy Injection Application Blok wszystkie CallHandlers mają nowy atrybut Order (typu int), który określa kolejność, w jakiej mają być nakładane polisy. Jest to bardzo przydatna zmiana, gdyż dzięki niej można na przykład zarządać, aby autoryzacja dostępu do metody odbyła się przed walidacją jej parametrów.
  • Przy używaliu ValidationCallHandler mamy możliwość określenia nazw zestawów reguł (RuleSet), jakie mają zostać użyte do walidacji parametrów.
  • Wsparcie dla WMI 2.0 i poprawiona instrumentacja.
  • Możliwość wpięcia własnego CacheManagera (poprzez interfejs ICacheManager)
  • Zmiany w Logging Application Block.
  • Inne (poprawki błędów, poprawki wydajności, nowe liczniki wydajności)
  • Wsparcie dla .NET 3.5 i VS 2008.

Ostatni punkt jest właściwie zaletą i wadą jednocześnie, gdyż wymagany jest .NET 3.5. Dla projektów tworzonych dla .NET 2.0 i 3.0 pozostaje EntLib 3.1. Pocieszeniem jest fakt, że Unity można pobrać oddzielnie i wymaga on już tylko .NET 2.0 lub nowszego.

W najbliższym czasie mam zamiar przyjrzeć się Unity oraz opisać moje dotychczasowe doświadczenia z Policy Injection (który moim skromnym zdaniem nadał nowy sens całemu Enterprise Library).

czwartek, 15 maja 2008

LINQPad

Właśnie dodałem sekcję "Moje aktualne top 10", w której będę umieszczał programy, strony i wszystko inne, co aktualnie wydaje mi się najbardziej ciekawe. LINQPad jest jej pierwszą (i na razie jedyną) pozycją. Napisany został przez Josepha Albarhari, autora książki "C# 3.0 in a Nutshell".

Program ten to tzw. "must have" każdego, kto ma zamiar używać technologii LINQ (to SQL, to Objects, to XML). W skrócie jest to mały edytor pozwalający odpalać wyrażenia C#/VB oraz kawałki kodu. Dzięki niemu można przetestować każde wyrażenie LINQ. Wszystko mówiący screen:

image

Cudo to potrafi:

  • łączyć się z bazami MS SQL,
  • wyświetlać wyniki zapytań,
  • wyświetlać kod SQL zapytania,
  • wyświetlać zapytanie LINQ skonwertowane do extension methods oraz wyrażeń lambda;
  • zawiera 200 przykładów zapytań z książki "C# 3.0 in a Nutshell" - świetny materiał do nauki LINQ.

Aplikacja jest dostępna na stronie http://www.linqpad.net/ i co najważniejsze jest darmowa.