środa, 7 marca 2012

Jak przyspieszyć kodowanie cz.3 ( AroLibraries )

Od ponad 2 lat rozwijam projekt (AroLibraries) w którym zapisuje wszystkie metody rozszerzalne ( extension methods ).


AroLibraries to biblioteka zawierająca rozwiązania, które są pomocne przy wytworzeniu oprogramowania. Jednym z podstawowych rozwiązań to wykorzystanie rozszerzonych metod. Takie rozwiązanie pozwala na: - ukrycie części implementacji - czytelniejszą składnię - wielokrotne wykorzystanie tego samego kodu
Zamiast za każdym razem pisząc:
    Bitmap image = new Bitmap("picture.bmp");
    Stream memoryStream = new MemoryStream();
    image.Save(memoryStream, ImageFormat.Bmp);
    byte[] bytes = new byte[memoryStream.Length];
    memoryStream.Position = 0;
    memoryStream.Read(bytes, 0, (int)memoryStream.Length);
    
    memoryStream.Close();
    var binary = new Binary(bytes);
   return binary;

Możemy zapisać w formie:
    Bitmap image = new Bitmap("picture.bmp");
    image.ToBinary();
Kod z wykorzystaniem extension methods jest zdecydowanie czytelniejszy. Poniżej przedstawiam parę ciekawszych rozwiązań za pomocą AroLibraries:
9.8F . IsBetween(9, 10); 
//określa czy liczba 9.8 jest w przedziale 9 i 10

DateTime.Now.IsWeekend(); 
// sprawdza czy dzisiaj jest weekend

DateTime.Now.ToSecondsFromEpoch(); 
// data w formacie Epoch

DateTime.Now.EqualsToHour(new DateTime(1986, 03, 29, 12, 0, 0));  
//sprawdza czy teraz jest ta sama godzina

"4AAB7F67-A898-442a-884A-364411D584EC".IsValidGuid();
 //sprawdza czy string jest w formacie GUDI

"mymail@zzzzzzz.com". IsValidEmailAddress(); 
//sprawdza czy string jest w formacie e-maila

string words = "Some words about Library";
words.Reverse(); 
// odwraca string  ("yrarbiL tuoba sdrow emoS")

words.GetRightSideOfString(13); 
// zwraca prawą stronę stinga "about Library"

words.CountWords(); 
//liczy wyrazy

words.ReplaceOnce("a",""); 
//zamienia tylko pierwsze wystąpienie w tekście

words.ToMd5(); 
//zwraca skrót MD5 z tekstu


new Exception("0", new Exception("1", new Exception("2", new Exception("3"))))
. GetMostInner(); 
//zwraca najbardziej wewnętrzny wyjątek  (Exception nr "3")

var numbers = 1.IterateTo(10);
//iteruje od 1 do 9 

numbers.IndexOf(6); 
//zwraca index liczby 6
numbers.Repeat(2, true); 
//{1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9}

numbers.Repeat(2, false); 
// {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9}

numbers.Shuffle();
 //miesza elementy

numbers.Swap(1,2); 
//zamienia miejscami element nr 1 z elementem nr 2

numbers.ToString(";");
 // zwraca string elementów oddzielonymi średnikiem ( "1; 2; 3; 4; 5; 6; 7; 8; 9")


9.In(numbers); 
//sprawdza czy liczba 9 jest w danej kolekcji

9.ToMonthName("Styczeń");
 //zwraca nazwę miesiąca

'a'.IsVowel(); 
//sprawdza czy jest samogłoską

var persons = new[]
{
new Person {
           FirstName = "Arek", 
           LastName = "XYZ",
           Age = 26},
};
persons.ToDataTable();    
// zmienia kolekcje w tabelę

persons.OrderBy(x => x.Age); 
//sortuje po danym polu


Bitmap image = new Bitmap("picture.bmp");
image.ToBinary();  
//konwersja do typu Binary

image.SaveJpeg("pic.jpg"); 
//zapisuje do formatu jpeg

image.Fill(Color.Black);
 //zwraca obrazek cały pomalowany na czarno

image.IsPixelInImage(-1, 100); 
// sprawdza czy można pobrać pixel o podanych współrzędnych  

image.GetPixels(); 
// zwraca wszystkie kolory na obrazku

image.ToByte(); 
//konwersja do byte[]

image.ToByte().OpenBytesAsFile(".bmp"); 
// otwiera plik w zewnętrznym edytorze


TextBox tb= new TextBox();
tb.WriteLine("Text"); 
//pisze po textboxie

DirectoryInfo di= new DirectoryInfo("c:");
di.GetDirectorySize(); 
//zwraca wielkość katalogu

Stream stream= GetStream();
stream.SaveToFile("Text.txt"); 
//zapisuje stream do pliku

Stream textStream= new MemoryStream();
stream.CopyStreamTo(textStream); 
//kopiuje do nowego źródła
           

XmlNode node = GetXmlNode();
node.ToXElement(); 
//zwraca XElement

Projekt jeszcze nie jest w pełni stworzony. W przyszłości będę chciał stworzyć do niego testy jednostkowe. Liczne extension methods można znaleźć pod tym linkiem, a kod źródłowy projektu można pobrać z portalu codeplex.

Brak komentarzy:

Prześlij komentarz