not thread safe

advertisement
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
Download