Курс. NET
Орг. вопросы • • Включить камеру Отметить присутствующих След. Занятие – 28 июня После регистрации на гитхабе просьба сообщить ссылку на репозиторий (можно синуть сообщение мне в контакте или написать Юре письмо со сслыкой)
Хорошая книга • 97 этюдов для архитекторов программных систем • Нил Форд, Майкл Найгард, Билл де Ора
Хорошая книга • Савина Романа • Тестирование DOT COM или Пособие по жестокому обращению с багами в интернетстартапах
Задача • Поприкалываться с рефлексией. • Суть: надо написать универсальный (с небольшими ограничениями) «сохранятель» и загрузчик данных. • Задача: есть класс. Надо его сохранить в XML и восстановить из него, как при бинарное сериализации
Первый шаг • Сгенерировать XML. • Пусть именем элемента будет тип объекта, а дочерними узлами – его поля (название – название поля, значение – значение поля)
Второй шаг - восстановить • Обратить внимание на Type. Descriptor
Git. Супер краткое руководство
Системы контроля версий (централизованные) CVS, Subversion и Perforce. • есть центральный сервер. • централизованный Много лет это было сервер является стандартом для систем уязвимым местом всей контроля версий системы. • все знают, кто и чем занимается в проекте. У администраторов есть чёткий контроль над тем, кто и что может делать. • администрировать ЦСКВ легко.
Распределенные системы контроля версий (Git, Mercurial, Bazaar или Darcs) • клиенты не просто выгружают последние версии файлов, а полностью копируют весь репозиторий. Каждый раз, когда клиент забирает свежую версию файлов, он создаёт себе полную копию всех данных • можно работать с несколькими удалёнными репозиториями • Так, в одном проекте можно одновременно вести несколько типов рабочих процессов, что невозможно в централизованных системах.
Ставим программу Git Extentions
2. Заходим на https: //github. com/ • Регистрируемся. После регистрации
Выбираем Create Repository
• Кликаем по созданию репозитория (под пунктом 1) • Вводим свободное имя репозитория + описание
• Нажимаем create repository
Переключаемся на http
• Запускаем Git Extentions
• Во время передачи изменений затребует ввести имя пользователя и пароль от гитхаба
ORM Object Relation Mapping
Плюс ORM • Абстракция над конкретным SQL – Минус – надо знать, поддерживает ли ORM данный SQL • LINQ to SQL без костылей работает только с MSSQL • Entity работает с многими СУБД – Минус – нельзя использовать «фичи» конкретного SQL – Плюс – снижается порог вхождения в проект – Минус – мало варианций
Плюс ORM • Легкость генерации – В VS что бы сгенерировать модель надо сделать два-десять кликов или автоматически по Pre Build Event • Минус Event – то, что возможно потребуется два построения – для генерации и для использования результатов генерации
Плюс ORM • Получение объектно-ориентированного кода – Минус – синтаксического контроля атрибутов, которые производят сопоставление БД нет – Минус - Часто большой объем автогенерируемого кода, который понижает процент покрытия тестами – Плюс – нет строк, всплывающая подсказка
Плюс ORM • Как правило реализуется на ленивых вычислениях
Минус ORM • Не любое компилируемое выражение может быть переведено в SQL выражение
Минус ORM • Нельзя оптимизировать получаемый код
Минусы ORM • Возможные задержки в команде из-за невозможности скомпилировать, пока другой человек меняет свою часть
Минусы ORM • Неточность отображения – В MSSQL есть два типа даты – с точностью до 3 х миллисекунд и с точностью до минуты. В. NET аналога нет – все преобразуется в Date. Time • Тип действия на обновление и удаление не отображается в код на C#
В любом случае • Тесты, тесты…
Минус VS 2012 • Раньше редактор таблиц в БД и самой БД был проще, сейчас придется пользоваться SQL Management Studio
А вы знаете английский? Insert and Update = Delete + update оказывается
Добавление источника данных (БД) в проект • Указание в Management Studio значения по умолчанию для идентификаторов
Генерация LINQ to SQL • Результат – куча автосгенерированного кода – – • • Сгенерированный код нацелен на расширение через Partial классы Имеет несколько конструкторов [global: : System. Data. Linq. Mapping. Database. Attribute(Name="ORM_Test. Table")] public System. Data. Linq. Table
Логирование результатов запросов • Какая логическая гадость в примере?
• Ответ – какого … делает логирование? Оно должно быть инкапсулировано
Генерация Entity • Строка подключения содержит намного больше информации, чем LINQ. • Сравнить строку подключения LINQ и Entity • Стратегия кодогенерации, удаление tt файлов
Генерация Entity (скриншот)
CRUD для LINQ • Проблема со значением по умолчанию