Евгений Колесников hace 2 años
padre
commit
bd1875578f
Se han modificado 4 ficheros con 171 adiciones y 2 borrados
  1. 57 0
      articles/rest_booking.md
  2. 6 0
      articles/vue_intro.md
  3. 102 0
      articles/web_basic.md
  4. 6 2
      readme.md

+ 57 - 0
articles/rest_booking.md

@@ -0,0 +1,57 @@
+# Разработка и тестирование библиотеки расчета списка доступного времени бронирования столика в ресторане
+
+## Техническое задание на разработку библиотеки
+
+* название библиотеки: `RestaurantHelpers.dll`
+* Название класса: `Booking`
+* Название метода: `CalcTimeList`
+
+В параметрах библиотеке передаются:
+
+* JSON-строка со временем работы ресторана по дням недели (1 - понедельник... 7- воскресенье), время работы задано строкой в формате "HH:MM-HH:MM", например:
+
+    ```json
+    {
+        "1": "11:00-23:00",
+        "2": "11:00-23:00",
+        "3": "11:00-23:00",
+        "4": "11:00-23:00",
+        "5": "11:00-05:00",
+        "6": "12:00-05:00",
+        "7": "12:00-03:00"
+    }
+    ```
+
+* Дата и время (в формате **DataTime**), для которого нужно рассчитать список доступного времени
+
+    ```cd
+    var targetTime = new DateTime(2024, 02, 28, 10, 0, 0);
+    ```
+
+Библиотека должна возвращать IEnumerable список **TimeSpan** с шагом 30 минут, например:
+
+    ```cs
+    var result = new List<TimeSpan>() {
+        new TimeSpan(11, 0, 0),
+        new TimeSpan(11, 30, 0),
+        new TimeSpan(12, 0, 0),
+        new TimeSpan(12, 30, 0),
+        ...
+    }
+    return result;
+    ```
+
+Итоговая спецификация метода **CalcTimeList**
+
+```cs
+public IEnumerable<TimeSpan> CalcTimeList(string workTime, DateTime targetTime);
+```
+
+При расчете нужно учитывать следующие ограничения:
+
+* при попытке заказать расчет на прошедшую дату генерировать исключение
+* при заказе расчета на "сегодня" учитывать текущее время и не включать в список прошедшее время
+* не включать в список время за 2 часа до завершения работы ресторана
+* учитывать "ночной" режим работы. Т.е. при расчете списка на воскресение включать утренние часы, остающиеся от субботы (не конкретно эти дни, а просто проверять время работы предыдущего дня недели)
+
+## Написать модульные тесты для разработанной библиотеки

+ 6 - 0
articles/vue_intro.md

@@ -0,0 +1,6 @@
+# Знакомство с VUE.js
+
+[Официальный сайт на русском](https://v3.ru.vuejs.org/)
+
+
+

+ 102 - 0
articles/web_basic.md

@@ -0,0 +1,102 @@
+# Основы WEB-разработки
+
+WEB разработка делится на две независимые части: **Фронтенд** и **Бэкенд**
+
+## Фронтенд
+
+**Вся лицевая сторона**. Фронтенд-разработчик отвечает за то, что пользователь видит и с чем взаимодействует на странице. Например: дизайн, визуальные элементы, схемы.
+
+Задачи фронтендера — сделать сайт, который будет решать задачи владельца, одинаково корректно работать на всех устройствах, независимо от браузера и размера экрана и при этом будет удобен пользователю.
+
+Основные инструменты: **HTML**, **CSS** и **JavaScript**.
+
+## Бэкенд
+
+**Невидимая часть сайта**. Бэкенд-разработчик отвечает за то, что скрыто от глаз пользователя и работает на сервере. Например: создание базы данных и программы, которые будут записывать информацию в базу, шифрование паролей и ценной информацией, настраивание доступов и системы резервного копирования данных, написание программы, обрабатывающие информацию, невидимую пользователю.
+
+Языков программирования для бэкенда много, например: **PHP**, **Ruby**, **Python** или **Node.js**. Для бэкенд-разработки нужны системы управления базами данных: **MySQL**, **PostgreSQL**, **SQLite** или **MongoDB**.
+
+## Вёрстка страниц
+
+Вне зависимости от того, что вы выберете: фронтенд или бэкенд, вам придётся взаимодействовать с веб-страницами. Для этого надо изучить **HTML** и **CSS**.
+
+>IMHO это утверждение не всегда верно. Да, большинство "старых" бекенд-фреймворков содержат шаблонизаторы для формирования **HTML** файлов, но современные JS-фреймворки формируют контент на лету и в бекенд ходят только за данными. Таким образом бекенд-разработчик может сосредоточиться на работе с данными.
+
+### HTML
+
+Это язык гипертекстовой разметки. Отвечает за структуру и содержание страницы. Он состоит из тегов, а тег состоит из имени, заключённого между знаками «меньше» и «больше». Например: `<h1>`, `<p>` и `<ul>`.
+
+Вспомните, как вы работаете с документом в текстовом редакторе. Пишете текст, фрагменты выделяете курсивом или цветом, вставляете картинки или таблицы. Веб-разработчик делает то же самое в редакторе кода с помощью тегов.
+
+Вместо расширения `*.txt` тут используется `*.html`. Оно даёт понять браузеру, что внутри файла находится код веб-страницы. Браузер разбирает его структуру, определяет взаиморасположение элементов и визуализирует их.
+
+```html
+<!DOCTYPE html>
+<html>
+ <head>
+  <meta charset="utf-8">
+  <title>HTML Документ</title>
+ </head>
+ <body>
+  <p>
+   <b>
+    Этот текст будет полужирным, <em>а этот — ещё и курсивным</em>.
+   </b>
+  </p>
+ </body>
+</html>
+```
+
+Веб-стандарты **HTML** описаны в спецификациях. Это главный источник знаний и для браузеров, и для разработчиков. Важно следить за их обновлениями.
+
+### CSS
+
+Это язык, который используется для стилизации вашей разметки. Например: сделать текст красным, выровнять по левую сторону, округлить углы изображения, поиграть со шрифтами, сделать отступы больше или меньше.
+
+```css
+p {
+ font-family: "Arial", "Helvetica", sans-serif;
+}
+
+/* свойству font-family передаются сразу несколько шрифтов и название семейства */
+```
+
+Тег `<p>` отвечает за формирование текстового абзаца. Допустим, нам нужно чтобы все `<p>` на странице получили одинаковые свойства. Для этого надо подключить к странице стили. Пока они не подключены никакого эффекта от них не будет. Стили можно встроить внутри HTML-кода страницы (инлайново) или подключить их как внешний файл. Чаще всего стили подключают из внешнего файла с расширением `*.css`. Так разметка отделяется от стилизации, снижается вероятность ошибки, внешний файл кешируется и не загружается повторно. Для подключения из внешнего файла используется тег `<link>`.
+
+```html
+<head>
+ <link href="external.css" rel="stylesheet">
+</head>
+```
+
+Знание основ **HTML** и **CSS** позволит создавать простые сайты с текстовым наполнением. Если хотите что-то посложнее, не обойтись без языков программирования.
+
+## Программирование
+
+### JavaScript
+
+Браузерный язык программирования для фронтенд-разработки. Его поддерживают все популярные браузеры. Каждый сайт, каждое веб-приложение, которым вы пользовались содержит JavaScript-код. Его часто рекомендуют для изучения новичкам, потому что он достаточно простой, но содержит все фундаментальные вещи: объектно-ориентированную модель и структуры данных.
+
+Применяется, чтобы оживить HTML-страницы: добавить на страницу обработку действий пользователя или интересные визуальные эффекты. Возможности применения **JavaScript** ограничиваются только вашей фантазией и поддержкой браузеров. Не путайте его с **Java**, это совершенно разные языки.
+
+### PHP
+
+Серверный язык программирования, на котором пишут бэкендеры. Он создан специально для веб-разработки — написанный на нём код можно внедрить в HTML.
+
+Когда вы открываете свою страницу в социальной сети и вводите логин-пароль, компьютер формирует запрос с вашими данными и отправляет на сервер. На стороне сервера PHP получает информацию из базы данных, которая тоже лежит на сервере и формирует вашу страницу: передаёт на фронтенд имя, фотографию, заполняет поля. Результат оформляется в виде готового HTML и отправляется вам в браузер.
+
+PHP не самый сложный язык, но чтобы раскрыть все его возможности, потребуется изучить и другие технологии. Например, работу с базами данных: язык SQL, а также MySQL, PostgreSQL, SQLite или MongoDB.
+
+База данных — это место, в котором хранятся данные сайта. Это могут быть тексты страниц, списки пользователей с их логинами и паролями, каталоги продукции и многое другое. На PHP пишется серверная логика для интернет-магазинов, сервисов бронирования, а также крупных проектов, которыми пользуются миллионы людей: «Википедия» и «ВКонтакте».
+
+### React
+
+Библиотека на языке **JavaScript**. Используется для создания веб-приложений. Уметь пользоваться библиотеками нужно, чтобы оптимизировать написание кода и не тратить много времени на поиск ошибок. В библиотеке хранятся готовые решения, которые можно использовать для типовых задач.
+
+Чтобы написать приложение с помощью **React**, недостаточно знать **HTML**, **CSS** и **JavaScript**. Библиотеку придётся изучить отдельно. Но если у вас уже есть базовые знания **JavaScript**, проблем с этим не будет.
+
+### Vue
+
+JavaScript-фреймворк. Как и **React** используется для создания веб-приложений. На нём мы дальше и будем писать. **Vue** приложение содержит и верстку и стили и логику. При выполнении в браузере строится виртуальный DOM, в котором формируется содержимое, а затем это содержимое отрисовывается в окне браузера.
+
+АПИ будем использовать то, которое написали на `C#`.

+ 6 - 2
readme.md

@@ -537,7 +537,7 @@ tablayout
 1. [Создание проекта по индивидуальному заданию. Разработка Unit-тестов для проекта](./articles/5_3_1_10_unit_test_lab.md)
 1. [Реализация тестов для прошлых чемпионатов (WS22)](./articles/testing_lab.md)
 1. [Реализация тестов для прошлых чемпионатов (DE21)](./articles/testing_lab_de21.md)
-2. Лабораторная работа «Разработка тестовых пакетов»
+2. [Лабораторная работа «Разработка тестовых пакетов»](./articles/rest_booking.md)
 3. Лабораторная работа «Использование инструментария анализа качества»
 4. Лабораторная работа «Анализ и обеспечение обработки исключительных ситуаций»
 5. Лабораторная работа «Функциональное тестирование»
@@ -551,9 +551,13 @@ tablayout
 ## Практика №2, разработка web-приложений
 <!-- (articles/praktika_I.md) -->
 
+1. [Основы WEB-разработки](./articles/web_basic.md)
+1. [Знакомство с VUE.js](./articles/vue_intro.md)
+
 ## [Курсовой проект (ПМ 06)](./articles/kp2.md)
 
-<!-- 
+<!--
+CREATE USER 'login'@'%' IDENTIFIED BY 'password';
 -- разрешение пользователю создавать базы 
 GRANT ALL PRIVILEGES ON `isergeev%`.* TO 'isergeev'@'%';
 FLUSH PRIVILEGES;