Курс. NETХорошая книга Принципы, паттерны и методики гибкой
Курс .NET
Хорошая книга Принципы, паттерны и методики гибкой разработки на языке C# Мартин Р., Мартин М.
Хорошая книга Мифический человеко-месяц, или Как создаются программные системы Фредерик Брукс
Орг. вопросы Включить камеру Отметить присутствующих След. Занятие – 9 июля
Дом. задание Сделать сайт, в котором есть страница с многострочным полем для ввода. После ввода в него тест и нажатия на кнопку «обработать» введенный текст обрабатывается (как во тестовом задании) и выводится форма, в которой выведены все файлы. Сделать страницу, в котором есть два поля ввода – в первое вводится строка, во второе – после нажатия на кнопку выводится кодированная строка, в которой HTML теги заменены для вывода в качестве текста
ASP.NET MVC Введение
ASP.NET Первая попытка сделать программирование под web так же как программирование под Desktop приложение – Windows Forms Реализовать паттерн MVC можно и на ASP.NET С тестами в ASP.NET намного хуже, чем в ASP.NET MVC При желании можно элементы технологии заменить или заточить под свои нужны, но в ASP.NET MVC делается все намного проще
MVC – model view controller View Отображение информации Controller Управление с отображением, взаимодействие с моделью Model Бизнес-логика модели
Что реально? БД Модель Контроллер + движок рендеринга HTML страница Генерируется запрос на основании действий пользователя Получение из запроса модели Обработка модели расширяет данные БД, нарушает правила избыточности, умеет себя валидировать Модель – не правила бизнес-логики в терминах ASP.NET MVC
Суть ASP MVC Писать программы проще, потому что концепция «вебовская», а не притянутая десктопная Их проще писать, если есть четкое разграничение логики В MVC четко выделены контроллеры Контроллеры имеют методы, часть из которых имеет View – то, как будут отображаться результаты вычислений. Сами результаты вычислений передаются в модели
Задача Реализовать суммирование двух чисел Что демонстрируем пример Синтаксис Razor Использование моделей Отсутствие валидации модели (будет отдельная лекция) Вызов метода из формы Создание View для методов
ASP.NET MVC Razor
Обычная страница @using NMSP @model Sample @{ ViewBag.Title=“zzz”; }
Index
@Model.Test
Операторы разор начинаются с @ В данном случае – строго типизированное представление @ в 99% случаев правильно определит, что хотели писатьViewBag ViewBag – динамический тип. Dynamic По сути это набор пар (название свойства, его значение).
Синхронизация структуры БД
Проблема Когда начинается проект (долгий проект) заказчик как правило не знает всего, чего захочет Во время реализации изменения структуры БД не исключены, особенно во время оптимизаций (которые делать или слишком рано или слишком поздно) Есть коллектив разработчиков, которые работают независимо над одним проектом. Есть ORM в проекте
Приближение к решению При модификации БД каждый разработчик записывает скрипт изменения Потом скрипты запускаются «ручками» Проблемы – не забыть запустить скрипт, не пропустить ни один файл и т.д. Суть – брахло, единственная стоящая вещь – создания скприпта изменения
Приближение к решению Каждый скрипт добавляется в сборку (как Embedded resource) Каждый скрипт жестко нумеруется В БД записывается номер последнего выполненного скрипта При запуске смотрится, какие скрипты не выполнялись, выполняются и обновляется номер последнего выполненного скрипта в БД
Недостатки Пусть Вася и Петя параллельно делали скрипт и оба присвоили ему номер 2. Вася закомитил первым. Петя увидел, что номер уже занят и изменил номер 2 на номер 3 у своего скрипта. И «понеслась» - у некоторых будут «пропуски» обновлений, потому что номер 2 будет заменен на номер 3 и Васин номер 2 не выполнится.
Решение Каждое обновление имеет Guid. Каждое обновление имеет номер (для определения порядка выполнения) По сути получаются параллельные ветки обновлений структуры БД, которые разрабатывались независимо и поэтому не зависемы. Как следствие «перемешивание» обновлений из разных веток при сохранении относительного порядка – не страшно.
Где расположить и где запускать Запускать надо при старте сайта – точно Но что бы запустить сайт, надо его скомпилировать, а там ORM, для перегенерации которой надо обновить структуру БД. А для обновления – надо запустить Поэтому надо создать тестовую сборку, в которую включить обновления. И эта сборка должна быть независима. Даже если сайт не компилируется, тесты запустить можно. А после запуска тестов обновится структуру БД и сайт скомпилируется.
Как искать обновления и их запускать? Заранее не известно, сколько будет обновлений. Поэтому для поиска обновлений им надо дать какой-то специализированный маркет, т.е. атрибут Дальше с помощью рефлексии – получаем выполняемую сборку, получаем типы, фильтруем по наличию атрибута, создаем экземпляры классов, сортируем по порядку выполнения Исключаем те, которые уже выполнялись (их можно найти по Guid) Выполняем оставшиеся, каждый раз добавляя их Guid в список выполнявшихся. P.S. Guid легко генерировать с помощью средств VS
TDD Проблемы
Одна из проблем TDD Подготавливаем данные для теста («эталонные данные») Запускаем тест Видим ошибку или не ошибку Подготаваливаем данные для теста – что за этим кроется???????
Вариант 1 (не прикольный) using (var db = new cvs_dbEntities()) { var newRecord = new testtable {id = 1, name = "3", value = true}; db.testtables.AddObject(newRecord); var newRecord2 = new testtable { id = 2, name = "3", value = true }; db.testtables.AddObject(newRecord2); var newRecord3 = new testtable { id = 3, name = "3", value = true }; db.testtables.AddObject(newRecord3); var newRecord4 = new testtable { id = 4, name = "3", value = true }; db.testtables.AddObject(newRecord4); db.SaveChanges(); }
Вариант 1 (сказка на ночь) А если у таблицы 16 полей и надо добавить 10 записей?
Вариант 2 (прикольный) Взять open office или office
Проблема Как это сделать?
Решение (часть 1) Использовать csv формат (когда все разделяется запятыми, а сами запятые в тексте экранируются)
Решение (2) Сделать следующую структуру файла Строка с названием таблицы Строка, в каждой ячейке которой хранится значение поля Затем 0 или более строк со значениями этих полей Затем (опционально) – пустая строка Все тоже самое для другой таблицы
Пример содержимого файла testtable,, id,name,value 1,проверка 1,true 2,"прове, 2",false 3,"про "" 3",false ,, secondTable,, id,name,
Мелкая проблема Почему-то в Office 2010 хоть и пишут, что разделитель – запятая, но ставят точку с запятой. А в 2007 офисе – все нормально, ставят запятую
Возникающие проблемы 1) разбить файл на «части» по БД (мелочь) 2) Прочитать значения строк из файла (мелочь) 3) Понять, к какой таблице относится запись и какой класс надо создавать (мелочь) 4) воссоздать класс из строки + список полей (не совсем мелочь) 5) Добавить в таблицу новую запись (не совсем мелочь)
all_2013_07_02.ppt
- Количество слайдов: 33