Info • My name – Valera Kolupaev • Email – Valera.Kolupaev@gmail.com • Wave for questions - http://bit.ly/bsu-dotnet-2010 • All sources - https://code.google.com/p/bsu-epam-2010/ Learning roadmap 20 Занятий C# Data base www ASP .Net App Design Project • • • • • • • MSTest Test framework C# Delegates, Events, Extension Methods Must-know types (Stopwatch, Regex, *Builder, *Stream) Generics Collections Threading XML Day 1 • MSTest test framework • Delegates, Anonymous delegates • Events • Closures • Extension methods MSTest Test framework Проблема: MSTest - Решение Это можно делать только в тестах. MSTest - Решение MSTest Task Delegates • Делегат – это указатель на функцию • Делегат можно сохранить в переменную • Делегат можно вызвать (это вызовет саму функцию) Event – список Делегатов • Event – механизм для оповещения о событиях • Объявить («У нас есть чайник, который кипит») • Подписаться на оповещение («Скажи мне когда чайник закипел») • Вызвать («Чайник закипел!») Event в ASP.Net и WinForms Your Code Page Loaded Page Initialized Button Clicked Anonymous Delegate / Closure Anonymous Delegate / Closure Standard Delegates • Action<T> • Action<T1, T2, …> - ничего не возвращают • Func<T> • Func<T1, T2, …> - возвращают T1 Extension methods • Extension methods – это метод, который можно добавить к уже сделанному классу, даже если он не наш Var keyword • Var – ключевое слово для ленивых, оно позволяет не повторять тип в 2х местах: • Var – это не динамический тип. Ошибка компиляции Task for day 1 • Класс OutputColorizerBuilder, для раскраски вывода на консоль. • Класс должен иметь 2 метода: • Extension method Вы только что сделали Builder pattern Day 2 • Test Driven Development and NUnit • Least known .Net types • Collections NUnit • Nunit – framework для тестирования приложений, вместо MSTest • Download link: www.nunit.org • Тесты • Всегда в отдельном проекте • 1 тест проверяет 1 функцию программы NUnit Use case Create test Compile Run NUnit Test runner Проект для тестов Создать проект с тестами Добавить Reference на Nunit.Framework и тестируемый проект Test class Run test Правила написания тестов • Независимые • Параллельные • Простые • Быстрые (< 5 секунд) • 1 Assert per test • Шаблон (triple A) • Arrange – настроить • Act – сделать • Assert - проверить Test class Arrange Act Assert Future reading Test Driven Development: By Example Kent Beck The Art of Unit Testing: With Examples in .Net Roy Osherove Reading, more • Working Effectively with Legacy Code • Michael Feathers Basic types String StringBuilder *Writer *Reader Regex String vs StringBuilder • Каждая операция со String – создаёт новый объект • “foo” + “bar” + “baz” создаст 5 экземпляров • StringBuilder решает эту проблему Regex • Regular Expressions – Мини язык, для обработки текста • RegEx – регулярный язык, это значит что для его выполнения требуеться фиксированный объем памяти. • Не пытайтесь решать на нем задачи, если алгоритм решения этой задачи требует неограниченное количество памяти. Regex example • Проверка корректности Email. • Valera.kolupaev@gmail.com • [символы_точка]@[символы].[символы] • Regex: [A-Z0-9.]+@[A-Z0-9.]+\.[A-Z]{2-4} Если у вас есть проблема, и вы решили использовать Regex для нее, то у вас уже две проблемы. Regex спаситель Regex спаситель “Expresso” [A-Z0-9.]+@[A-Z0-9.]+\.[A-Z]{2-4} Readers/Writers • Часто взаимодействие программы с «внешним миром» происходит через потоки данных (Stream) • Для работы с потоковыми данными используется концепция Писателей / Читателей (*Reader, *Writer) • Писатели/Читатели есть для всего • Binary Reader/Writer • Stream Reader/Writer • String Reader/Writer • Xml Reader/Writer • HtmlText Reader/Writer MemoryStream Usage Data byte array Memory Stream Stream External Component Memory Stream Data byte array Stream BinaryReader Methods Name Description BinaryReader(Stream) Initializes a new instance of the BinaryReader class based on the supplied stream and using UTF8Encoding. BinaryReader(Stream, Encoding) Initializes a new instance of the BinaryReader class based on the supplied stream and a specific character encoding. ReadDouble Reads an 8-byte floating point value from the current stream and advances the current position of the stream by eight bytes. ReadInt64 Reads an 8-byte signed integer from the current stream and advances the current position of the stream by eight bytes. ReadString Reads a string from the current stream. The string is prefixed with the length, encoded as an integer seven bits at a time. Read(Byte(), Int32, Int32) Reads the specified number of bytes from the stream, starting from a specified point in the byte array. Generic Collections HashSet SortedSet Stack Queue List LinkedList SortedList <Key, Value> Dictionary <Key, Value> SortedDictionary <Key, Value> Collections are mostly arrays Dictionary is arrays of hash Collections overview • Great collections guide is available at http://bit.ly/bm6bzi • All collections are not thread safe • Most used collections are List<T> and Dictionary<T1, T2> • Others are for performance/memory tuning File IO & Testing lab • BookListApplicationController • Класс для управления списком книг • Методы: AddBook, RemoveBookByRegex, ExportByPredicate • Тесты: AddBook, RemoveByRegex, ExportByPredicate, BookTitle_ShouldBeUnique • BookListRepository : IBookListRepository • Класс, отвечающий за хранение книг (на диске) • LoadBooks, SaveBooks • Тесты: Прочитано – то, что сохранено • BookExporter : IBookExporter • Класс отвечающий за экспорт в читаемый вид (XML, HTML) • Тесты: Экспортированный текст совпадает с эталоном Linq to objects • Linq – “Language Integrated Query”, набор Extension Methods к IEnumerable, который существенно упрощает операции над коллекциями. • Показать основные операторы Linq (Aggr, Sum, Min, Max, Join, ToDict, ToLookup) Day 3 • Advanced generics • Linq to xml • Threading • Lab! Day 4 • Idisposable • Memory management • LOH • Generations • Memory leaks