Скачать презентацию Курс NET Хорошая книга Принципы паттерны Скачать презентацию Курс NET Хорошая книга Принципы паттерны

all_2013_07_02.ppt

  • Количество слайдов: 33

Курс. NET Курс. NET

Хорошая книга • Принципы, паттерны и методики гибкой разработки на языке C# • Мартин Хорошая книга • Принципы, паттерны и методики гибкой разработки на языке C# • Мартин Р. , Мартин М.

Хорошая книга • Мифический человекомесяц, или Как создаются программные системы • Фредерик Брукс Хорошая книга • Мифический человекомесяц, или Как создаются программные системы • Фредерик Брукс

Орг. вопросы • Включить камеру • Отметить присутствующих • След. Занятие – 9 июля Орг. вопросы • Включить камеру • Отметить присутствующих • След. Занятие – 9 июля

Дом. задание • Сделать сайт, в котором есть страница с многострочным полем для ввода. Дом. задание • Сделать сайт, в котором есть страница с многострочным полем для ввода. После ввода в него тест и нажатия на кнопку «обработать» введенный текст обрабатывается (как во тестовом задании) и выводится форма, в которой выведены все файлы. • Сделать страницу, в котором есть два поля ввода – в первое вводится строка, во второе – после нажатия на кнопку выводится кодированная строка, в которой HTML теги заменены для вывода в качестве текста

ASP. NET MVC Введение ASP. NET MVC Введение

ASP. NET • Первая попытка сделать программирование под web так же как программирование под ASP. NET • Первая попытка сделать программирование под web так же как программирование под Desktop приложение – Windows Forms • Реализовать паттерн MVC можно и на ASP. NET • С тестами в ASP. NET намного хуже, чем в ASP. NET MVC • При желании можно элементы технологии заменить или заточить под свои нужны, но в ASP. NET MVC делается все намного проще

MVC – model view controller View Отображение информации Controller Управление с отображением, взаимодействие с MVC – model view controller View Отображение информации Controller Управление с отображением, взаимодействие с моделью Model Бизнес-логика модели

Что реально? Модель БД Обработка модели Получение из запроса модели расширяет данные БД, нарушает Что реально? Модель БД Обработка модели Получение из запроса модели расширяет данные БД, нарушает правила избыточности, умеет себя валидировать Контроллер + движок рендеринга Модель – не правила бизнеслогики в терминах ASP. NET MVC HTML страница Генерируется запрос на основании действий пользователя

Суть ASP MVC • Писать программы проще, потому что концепция «вебовская» , а не Суть ASP MVC • Писать программы проще, потому что концепция «вебовская» , а не притянутая десктопная • Их проще писать, если есть четкое разграничение логики • В MVC четко выделены контроллеры • Контроллеры имеют методы, часть из которых имеет View – то, как будут отображаться результаты вычислений. • Сами результаты вычислений передаются в модели

Задача • Реализовать суммирование двух чисел • Что демонстрируем пример – Синтаксис Razor – Задача • Реализовать суммирование двух чисел • Что демонстрируем пример – Синтаксис Razor – Использование моделей – Отсутствие валидации модели (будет отдельная лекция) – Вызов метода из формы – Создание View для методов

ASP. NET MVC Razor ASP. NET MVC Razor

Обычная страница @using NMSP @model Sample Операторы разор начинаются с @ @{ View. Bag. Обычная страница @using NMSP @model Sample Операторы разор начинаются с @ @{ View. Bag. Title=“zzz”; } В данном случае – строго типизированное представление Index @Model. Test @ в 99% случаев правильно определит, что хотели писать

View. Bag • View. Bag – динамический тип. Dynamic • По сути это набор View. Bag • View. Bag – динамический тип. Dynamic • По сути это набор пар (название свойства, его значение).

Синхронизация структуры БД Синхронизация структуры БД

Проблема • Когда начинается проект (долгий проект) заказчик как правило не знает всего, чего Проблема • Когда начинается проект (долгий проект) заказчик как правило не знает всего, чего захочет • Во время реализации изменения структуры БД не исключены, особенно во время оптимизаций (которые делать или слишком рано или слишком поздно) • Есть коллектив разработчиков, которые работают независимо над одним проектом. • Есть ORM в проекте

Приближение к решению • При модификации БД каждый разработчик записывает скрипт изменения • Потом Приближение к решению • При модификации БД каждый разработчик записывает скрипт изменения • Потом скрипты запускаются «ручками» • Проблемы – не забыть запустить скрипт, не пропустить ни один файл и т. д. • Суть – брахло, единственная стоящая вещь – создания скприпта изменения

Приближение к решению • Каждый скрипт добавляется в сборку (как Embedded resource) • Каждый Приближение к решению • Каждый скрипт добавляется в сборку (как Embedded resource) • Каждый скрипт жестко нумеруется • В БД записывается номер последнего выполненного скрипта • При запуске смотрится, какие скрипты не выполнялись, выполняются и обновляется номер последнего выполненного скрипта в БД

Недостатки • Пусть Вася и Петя параллельно делали скрипт и оба присвоили ему номер Недостатки • Пусть Вася и Петя параллельно делали скрипт и оба присвоили ему номер 2. • Вася закомитил первым. Петя увидел, что номер уже занят и изменил номер 2 на номер 3 у своего скрипта. • И «понеслась» - у некоторых будут «пропуски» обновлений, потому что номер 2 будет заменен на номер 3 и Васин номер 2 не выполнится.

Решение • Каждое обновление имеет Guid. • Каждое обновление имеет номер (для определения порядка Решение • Каждое обновление имеет Guid. • Каждое обновление имеет номер (для определения порядка выполнения) • По сути получаются параллельные ветки обновлений структуры БД, которые разрабатывались независимо и поэтому не зависемы. Как следствие «перемешивание» обновлений из разных веток при сохранении относительного порядка – не страшно.

Где расположить и где запускать • Запускать надо при старте сайта – точно • Где расположить и где запускать • Запускать надо при старте сайта – точно • Но что бы запустить сайт, надо его скомпилировать, а там ORM, для перегенерации которой надо обновить структуру БД. А для обновления – надо запустить • Поэтому надо создать тестовую сборку, в которую включить обновления. И эта сборка должна быть независима. • Даже если сайт не компилируется, тесты запустить можно. А после запуска тестов обновится структуру БД и сайт скомпилируется.

Как искать обновления и их запускать? • Заранее не известно, сколько будет обновлений. • Как искать обновления и их запускать? • Заранее не известно, сколько будет обновлений. • Поэтому для поиска обновлений им надо дать какой-то специализированный маркет, т. е. атрибут • Дальше с помощью рефлексии – получаем выполняемую сборку, получаем типы, фильтруем по наличию атрибута, создаем экземпляры классов, сортируем по порядку выполнения • Исключаем те, которые уже выполнялись (их можно найти по Guid) • Выполняем оставшиеся, каждый раз добавляя их Guid в список выполнявшихся. • P. S. Guid легко генерировать с помощью средств VS

TDD Проблемы TDD Проблемы

Одна из проблем TDD • Подготавливаем данные для теста ( «эталонные данные» ) • Одна из проблем TDD • Подготавливаем данные для теста ( «эталонные данные» ) • Запускаем тест • Видим ошибку или не ошибку • Подготаваливаем данные для теста – что за этим кроется? ? ? ?

Вариант 1 (не прикольный) using (var db = new cvs_db. Entities()) { var new. Вариант 1 (не прикольный) using (var db = new cvs_db. Entities()) { var new. Record = new testtable {id = 1, name = "3", value = true}; db. testtables. Add. Object(new. Record); var new. Record 2 = new testtable { id = 2, name = "3", value = true }; db. testtables. Add. Object(new. Record 2); var new. Record 3 = new testtable { id = 3, name = "3", value = true }; db. testtables. Add. Object(new. Record 3); var new. Record 4 = new testtable { id = 4, name = "3", value = true }; db. testtables. Add. Object(new. Record 4); db. Save. Changes(); }

Вариант 1 (сказка на ночь) • А если у таблицы 16 полей и надо Вариант 1 (сказка на ночь) • А если у таблицы 16 полей и надо добавить 10 записей?

Вариант 2 (прикольный) • Взять open office или office Вариант 2 (прикольный) • Взять open office или office

Проблема • Как это сделать? Проблема • Как это сделать?

Решение (часть 1) • Использовать csv формат (когда все разделяется запятыми, а сами запятые Решение (часть 1) • Использовать csv формат (когда все разделяется запятыми, а сами запятые в тексте экранируются)

Решение (2) • Сделать следующую структуру файла – Строка с названием таблицы – Строка, Решение (2) • Сделать следующую структуру файла – Строка с названием таблицы – Строка, в каждой ячейке которой хранится значение поля – Затем 0 или более строк со значениями этих полей – Затем (опционально) – пустая строка – Все тоже самое для другой таблицы

Пример содержимого файла • • testtable, , id, name, value 1, проверка 1, true Пример содержимого файла • • testtable, , id, name, value 1, проверка 1, true 2, "прове, 2", false 3, "про "" 3", false , , second. Table, , id, name,

Мелкая проблема • Почему-то в Office 2010 хоть и пишут, что разделитель – запятая, Мелкая проблема • Почему-то в Office 2010 хоть и пишут, что разделитель – запятая, но ставят точку с запятой. А в 2007 офисе – все нормально, ставят запятую

Возникающие проблемы • 1) разбить файл на «части» по БД (мелочь) • 2) Прочитать Возникающие проблемы • 1) разбить файл на «части» по БД (мелочь) • 2) Прочитать значения строк из файла (мелочь) • 3) Понять, к какой таблице относится запись и какой класс надо создавать (мелочь) • 4) воссоздать класс из строки + список полей (не совсем мелочь) • 5) Добавить в таблицу новую запись (не совсем мелочь)