Как создать бота в visual studio
Microsoft Bot Framework - представляет собой комплексное предложение для создания и развертывания высококачественных ботов.
Содержание
Bot Builder SDK
Cognitive Services
Cognitive Services (ранее известные как LUIS, составная часть Project Oxford) позволяют упростить анализ естественного языка и выделение смысла из текстовых предложений. С помощью веб-интерфейса мы можем определить основные синтаксические конструкции, и автоматически присвоить им соответствующие намерения пользователя (intents), на которые затем будет реагировать бот.
Bot Connector
Канальная абстрация
Основная прелесть Bot Framework API состоит в том, что мы можем теперь писать боты, не ориентируясь на какой-то один канал общения. По сути дела, Bot Framework даёт нам правильный уровень абстракции для реализации механизмов беседы и диалогов, а конкретную связь с различными инструментами общения берет на себя Bot Connector. Это разделение позволяет программисту написать бот один раз, а общаться с ним отовсюду. Можно сформулировать этот принцип следующим образом, перефразируя известный из мира Java слоган: Write Once – Chat Everywhere.
Skype Bot API
Ещё одна новость, объявленная на //BUILD – это доступность отдельного Skype API для создания ботов. На самом деле создавать Skype-ботов можно и через Bot Framework, но возможности Bot Framework пока позволяют нам работать только с текстом (плюс с некоторыми видами attachemnt-ов), в то время как Skype Bot API несколько шире, и позволяет в том числе создавать видео-боты. При выборе технологии следует отдавать предпочтение Bot Framework, из-за её универсальности, однако если вы хотите создать действительно удивительный бот именно для Skype – посмотрите на Skype Bot SDK.
Создание бота
С помощью робота Framework эмулятора для тестирования приложения Bot
Bot Framework обеспечивает эмулятор канала, который позволяет тестировать вызовы на бота , как будто он вызывается с помощью облачной службы Bot Framework. Чтобы установить Bot Framework Emulator, скачать его с здесь. После установки, вы готовы к тестированию. Во-первых, начните бота в Visual Studio с помощью браузера в качестве хоста приложения. Изображение ниже использует Microsoft Edge. (см. Рис. 1)
Когда приложение построен и развернут веб-браузер будет открывать и отображать файл приложения default.htm (который является частью проекта Application Bot). Вы можете изменить файл default.html, чтобы соответствовать имя и описание вашего робота Application. При использовании эмулятора для тестирования приложения Bot, обратите внимание на порт, что приложение работает на, что в этом примере порт 3978. Вам понадобится эта информация для запуска Bot Framework Emulator.
Теперь откройте Bot Framework Emulator. Есть несколько пунктов, которые вам нужно будет настроить в инструменте, прежде чем вы можете взаимодействовать с бота Application.
При работе с эмулятором бот работает локально, вам необходимо ввести: (см. Рис. 2)
Публикация Bot приложения в Microsoft Azure
Сделать какие изменения вы хотели бы проект, и теперь вы готовы к публикации. Щелкните правой кнопкой мыши на проекте и выберите "Опубликовать", а затем свой соответствующий Azure информацию о подписке. По умолчанию, бот должен быть опубликован в качестве Microsoft Azure App службы. При публикации, отслеживать URL , который вы выбрали , потому что мы должны его обновить Bot Framework регистрации конечной точки. Первый раз , когда вы публикуете Есть несколько дополнительных шагов; но у вас есть только делать их один раз.
В Visual Studio, щелкнув правой кнопкой мыши на проекте в обозревателе решений и выберите пункт "Опубликовать" - или поочередного выбора "Build | Публикация" отображает следующий диалог: (см. Рис. 4)
Создать откроется диалоговое окно App Service, заполните детали как appropriate.Make забудьте выбрать "Веб-приложение" из Изменение типа выпадающего в верхнем правом углу вместо "API App" (который по умолчанию). (см. Рис. 5.)
После того, как вы нажмете хорошо на план обслуживания App, вы определили вашу службу App полностью. И вы вернетесь к публикации веб-мастера. (см. Рис. 6)
Теперь, когда бот регистрируется, вам необходимо обновить ключи в файле web.config в вашем проекте Визуальный Studio. Измените следующие ключи в файле web.config , чтобы соответствовать генерировшихся при сохранении вашей регистрации, и вы готовы строить. При нажатии на "шоу" ссылка покажет значение, а также трейлерах обнаженным ссылку регенерировать , если вы когда - нибудь понадобится изменить AppPassword. Обновите свою web.config, и повторно опубликовать ваш бот Azure.
Это конец конфигурации - ваш бот готов для пользователей. Они будут иметь свои собственные шаги, чтобы следовать, чтобы дать разрешение Bot участвовать в их группе / канале или получить сведения о соединении, как количество SMS телефона или по электронной почте. Они могут сделать это на странице каталога для вашего Бота.
В этой статье показано, как создать робот с помощью пакета SDK для Bot Framework и как протестировать его с помощью Bot Framework Emulator. This article shows you how to build a bot by using the Bot Framework SDK, and then shows how to test it with the Bot Framework Emulator.
Создание бота с помощью службы Azure Bot и локальных средств — это независимые друг от друга параллельные процессы. Creating a bot with Azure Bot Service and creating a bot locally are independent, parallel ways to create a bot.
Предварительные требования Prerequisites
Шаблоны Templates
- Visual Studio Visual Studio
- VS Code и CLI VS Code / CLI
- Visual Studio 2019 или более поздней версии. Visual Studio 2019 or later
чтобы добавить шаблоны bot в Visual Studio, скачайте и установите шаблоны пакета SDK для bot Framework версии 4 для Visual Studio VSIX-файла. To add the bot templates to Visual Studio, download and install the Bot Framework v4 SDK Templates for Visual Studio VSIX file.
Для установки шаблонов Bot Framework выполните следующие действия. To install the Bot Framework templates:
Откройте окно консоли. Open a console window.
Убедитесь, что шаблоны установлены правильно. Verify the templates have been installed correctly.
При описанных выше шагах установки будут установлены все три шаблона платформы Bot. The above installation steps will install all three Bot Framework templates. Вам не нужно устанавливать все шаблоны и устанавливать только те, которые будут использоваться. You don't need to install all the templates and can install just the ones you will use. В этой статье используется шаблон « echo Bot ». This article makes use of the echo bot template.
- Java 1,8 или более поздней версии Java 1.8 or later
- Bot Framework Emulator. Bot Framework Emulator
- Visual Studio Code или любой привычный редактор кода, если вы намерены изменять код бота. Visual Studio Code or your favorite IDE, if you want to edit the bot code.
- Установка Maven Install Maven
- Установите node.js версии 12,10 или более поздней. Install node.js version 12.10 or later.
- Учетная запись Azure, если вы хотите выполнить развертывание в Azure. An Azure account if you want to deploy to Azure.
Шаблоны Templates
Используйте генератор Yeoman для быстрой настройки диалогового AI-робота с использованием основных возможностей AI в среде Bot версии 4. Use the Yeoman generator to quickly set up a conversational AI bot using core AI capabilities in the Bot Framework v4. Дополнительные сведения см. в разделе Yeoman.IO. For more information, see yeoman.io.
Генератор поддерживает три различных варианта шаблона, как показано ниже. The generator supports three different template options as shown below.
установка Yeoman; Install Yeoman
Убедитесь, что установлен node.js версии 12,10 или более поздней. Assure that you have installed node.js version 12.10 or later.
Установите последнюю версию NPM. Install latest npm.
Установите Yeoman. Install Yeoman. Обязательно установите глобально. Make sure to install globally.
Установите Generator-botbuilder-Java. Install generator-botbuilder-java. Обязательно установите глобально. Make sure to install globally.
Убедитесь, что Yeoman и Generator-botbuilder-Java установлены правильно. Verify that Yeoman and generator-botbuilder-java have been installed correctly.
Шаблоны Templates
Чтобы установить Yeoman и генератор Yeoman для Bot Framework V4, сделайте следующее: To install Yeoman and the Yeoman generator for Bot Framework v4:
Откройте терминал или командную строку с повышенными привилегиями. Open a terminal or elevated command prompt.
Перейдите в каталог, где вы намерены разместить боты JavaScript. Switch to the directory for your JavaScript bots. Если такого каталога еще нет, создайте его. Create it first if you don't already have one.
Убедитесь, что у вас установлены последние версии NPM и Yeoman. Make sure you have the latest versions of npm and Yeoman.
Установите генератор Yeoman. Install the Yeoman generator. Yeoman — это инструмент для создания приложений. Yeoman is a tool for creating applications. Дополнительные сведения см. в разделе Yeoman.IO. For more information, see yeoman.io.
Установка Microsoft Build Tools, указанная ниже, требуется только в том случае, если Windows используется как операционная система для разработки. The install of Windows build tools listed below is only required if you use Windows as your development operating system. Для некоторых установок на этапе установки restify возникает ошибка, связанная с node-gyp . For some installations, the install step for restify is giving an error related to node-gyp . В таком случае попробуйте выполнить следующую команду с дополнительными разрешениями. If this is the case you can try running this command with elevated permissions. Этот вызов может также зависнуть, не выходя из системы, если на компьютере уже установлен Python. This call may also hang without exiting if Python is already installed on your system:
Выполните эту команду только в том случае, если вы используете Windows. Only run this command if you are on Windows.
- Python 3.6, 3.7 или 3.8 Python 3.6, 3.7, or 3.8
- Bot Framework Emulator. Bot Framework Emulator
- Знание асинхронного программирования в Python Knowledge of asynchronous programming in Python
Некоторые разработчики могут оказаться полезными при создании программы-роботы Python в виртуальной среде. Some developers may find it useful to create Python bots in a virtual environment. Приведенные ниже инструкции подходят для разработки и в виртуальной среде, и на локальном компьютере. The steps below will work regardless if you're developing in a virtual environment or on your local machine.
Шаблоны Templates
Установите необходимые пакеты, выполнив следующие pip install команды: Install the necessary packages by running the following pip install commands:
Последний пакет, cookiecutter, будет использоваться для создания программы-робота. The last package, cookiecutter, will be used to generate your bot.
Создание бота Create a bot
Благодаря шаблону проект содержит весь код, необходимый для создания бота в рамках этого краткого руководства. Thanks to the template, your project contains all the code that's necessary to create the bot in this quickstart. Для тестирования бота не требуется дополнительный код. You don't need any additional code to test your bot.
При создании основного робота требуется модель языка Luis. If you create a Core bot, you'll need a LUIS language model. Вы можете создать языковую модель по адресу Luis.AI. You can create a language model at luis.ai. Создав модель, обновите файл конфигурации. After creating the model, update the configuration file.
[!NOTE] > If you see that the message cannot be sent, you might need to restart your machine as ngrok didn't get the needed privileges on your system yet (only needs to be done one time). -->в Visual Studio Code откройте новое окно терминала. In Visual Studio Code, open a new terminal window.
Перейдите в каталог, в котором нужно создать проект Bot. Navigate to the directory in which you want to create your bot project.
Создайте новый проект ECHO Bot с помощью следующей команды. Create a new echo bot project using the following command. Замените <your-bot-name> именем, которое будет использоваться для проекта Bot. Replace <your-bot-name> with the name to use for your bot project.
Откройте новое окно терминала. Open a new terminal window.
Перейдите в каталог, в котором нужно создать проект Bot. Navigate to the directory in which you want to create your bot project.
Создайте новый проект ECHO Bot с помощью следующей команды. Create a new echo bot project using the following command. Замените <your-bot-name> именем, которое будет использоваться для проекта Bot. Replace <your-bot-name> with the name to use for your bot project.
Выполните следующую команду, чтобы создать эхо-робот из шаблонов. Run the following command to create an echo bot from templates. Команда использует параметры по умолчанию для своих параметров. The command uses default options for its parameters.
Yeoman запросит некоторые сведения для создания бота. Yeoman prompts you for some information with which to create your bot. Для задач в этом руководстве используйте значение по умолчанию. For this tutorial, use the default values.
Генератор поддерживает ряд параметров командной строки, которые можно использовать для изменения параметров генератора по умолчанию или для предварительного заполнения запроса. The generator supports a number of command line options that can be used to change the generator's default options or to pre-seed a prompt.
Благодаря шаблону проект содержит весь код, необходимый для создания бота в рамках этого краткого руководства. Thanks to the template, your project contains all the code that's necessary to create the bot in this quickstart. Для тестирования бота не требуется дополнительный код. You don't need any additional code to test your bot.
Чтобы создать бот Core , вам потребуется языковая модель LUIS. If you create a Core bot, you'll need a LUIS language model. Вы можете создать языковую модель по адресу Luis.AI. You can create a language model at luis.ai. Создав модель, обновите файл конфигурации. After creating the model, update the configuration file.
Используйте генератор для создания эхо-робота. Use the generator to create an echo bot.
Yeoman запросит некоторые сведения для создания бота. Yeoman prompts you for some information with which to create your bot. Для задач в этом руководстве используйте значение по умолчанию. For this tutorial, use the default values.
Благодаря шаблону проект содержит весь код, необходимый для создания бота в рамках этого краткого руководства. Thanks to the template, your project contains all the code that's necessary to create the bot in this quickstart. Для тестирования бота не требуется дополнительный код. You don't need any additional code to test your bot.
Чтобы создать бот Core , вам потребуется языковая модель LUIS. If you create a Core bot, you'll need a LUIS language model. Вы можете создать языковую модель по адресу Luis.AI. You can create a language model at luis.ai. Создав модель, обновите файл конфигурации. After creating the model, update the configuration file.
Чтобы создать робот, перейдите в каталог, в котором вы хотите создать робот. To create your bot, navigate to the directory you want to create your bot. Затем выполните следующую команду. Then run the following command:
эта команда копирует все необходимые файлы из GitHub для создания эхо-робота на основе шаблона Python echo. This command copies all needed files from GitHub to create an Echo Bot based on the Python echo template. Вам будет предложено ввести имя и описание бота. You will be prompted for the name of the bot and a description. Введите следующие значения. Enter the following values:
bot_name: echo-Bot bot_name: echo-bot
bot_description: Программа -робот, которая возвращает ответ обратно пользователю. bot_description: A bot that echoes back user response.
Запуск бота Start your bot
В Visual Studio In Visual Studio
- Откройте проект Bot. Open your bot project.
- Запустите проект без отладки. Run the project without debugging.
Visual Studio создаст приложение, развернет его на узле localhost и запустит веб-браузер для отображения страницы приложения default.htm . This will build the application, deploy it to localhost, and launch the web browser to display the application's default.htm page. На этом этапе бот выполняется локально, используя порт 3978. At this point, your bot is running locally on port 3978.
Запуск программы Bot из VS Code: To run your bot from VS Code:
Откройте папку проекта Bot. Open your bot project folder.
Перейдите к пункту выполнить, а затем выберите выполнить без отладки. Go to Run, and then select Run Without Debugging.
- Если эта команда обновила параметры запуска, сохраните изменения и выполните команду повторно. If this command updated your launch settings, save the changes and rerun the command.
Visual Studio создаст приложение, развернет его на узле localhost и запустит веб-браузер для отображения страницы приложения default.htm . This will build the application, deploy it to localhost, and launch the web browser to display the application's default.htm page. На этом этапе бот выполняется локально, используя порт 3978. At this point, your bot is running locally on port 3978.
Чтобы запустить программу Bot локально в командной строке или терминале, выполните следующие действия. To run your bot locally in a command prompt or terminal:
Измените каталоги на папку проекта для программы-робота. Change directories to the project folder for your bot.
Используйте dotnet run для запуска программы-робота. Use dotnet run to start the bot.
Это приведет к сборке приложения и его развертыванию на localhost. This will build the application and deploy it to localhost. Веб-страница по умолчанию приложения не отображается, но на этом этапе Bot выполняется локально через порт 3978. The application's default web page will not display, but at this point, your bot is running locally on port 3978.
В окне терминала перейдите в каталог, в котором сохранен робот, а затем выполните команды, перечисленные ниже. From a terminal, navigate to the directory where you saved your bot, then execute the commands listed below.
Создайте проект Maven и упаковывает его в JAR -файл (Архив). Build the Maven project and packages it into a .jar file (archive).
Запустите Bot локально. Run the bot locally. Замените Archive-Name фактическим именем из предыдущей команды. Replace the archive-name with the actual name from the previous command.
Теперь все готово для запуска Emulator. You are now ready to start the Emulator.
В терминале или командной строке перейдите к каталогу, созданному для бота, и запустите бот с помощью npm start . In a terminal or command prompt change directories to the one created for your bot, and start it with npm start .
На этом этапе бот выполняется локально и использует порт 3978. At this point, your bot is running locally on port 3978.
В окне терминала перейдите в папку echo-Bot , в которую вы сохранили робот. From a terminal navigate to the echo-bot folder where you saved your bot. Выполните следующую команду, чтобы установить необходимые пакеты для запуска программы Bot. Run the following command to install any required packages to run your bot.
После установки пакетов выполните следующую команду для запуска программы Bot: Once the packages are installed run the following to to start your bot:
Вы поймете, что бот готов к тестированию, когда появится последняя строка, показанная на снимке экрана ниже. You will know your bot is ready to test when you see the last line shown in the screenshot below:
Скопируйте последние четыре цифры в адресе в последней строке (обычно это 3978) для использования на следующем шаге. Copy the last for digits in the address on the last line (usually 3978) since you will be using them in the next step. Теперь все готово для запуска Emulator. You are now ready to start the Emulator.
Запуск эмулятора и подключение к боту Start the Emulator and connect your bot
Установите Bot Framework Emulator. Start the Bot Framework Emulator.
выберите открыть Bot на вкладке приветствия Emulator. Select Open Bot on the Emulator's Welcome tab.
В этом случае выберите Подключиться. Then select Connect.
У нас есть традиция – каждой весной мы участвуем в Днях карьеры любимого Новосибирского госуниверситета, главной кузницы наших кадров. И каждый год мы придумываем для студентов что-нибудь любопытное. В этом году сделали мастер-класс о том, как написать чат-бота. Для регистрации на мастер-класс запустили в Telegram собственного бота «Академик» @academic_quiz_bot. Его же все вместе и собирали на мастер-классе.
Если вы еще не завели себе симпатичного бота, сейчас расскажем, как выбирать тему, и, собственно, делать бота.
Шаг 1. Чат-бот и Дни карьеры, где связь?
Придумать интересную тему для мастер-класса было непросто, ведь конкурировать приходится уже и с самими собой. 2 года назад мы за полтора часа мастер-класса на глазах студентов написали мобильное приложение для айфона, которое показывает погоду около их альма-матер НГУ (более 5000 загрузок, и продолжает скачиваться). Год назад мы за 1,5 часа сделали IoT-решение и научились зажигать лампочку со смартфона. В этом году нужно было сделать что-то не менее зажигательное, и мы решили научить студентов делать чат-ботов, ведь эти виртуальные собеседники сейчас переживают взрывной рост популярности.
Идея делать чат-бот традиционно взялась у нас не с потолка – для одного из наших заказчиков, мы как раз разработали чат-бот в Telegram, который позволяет территориальным менеджерам компании без доступа к стационарному компьютеру и быстрому интернету, оперативно управлять проектами – назначать, делегировать задачи и следить за статусом их исполнения.
К тому же, бот был удобным способом в игровой форме собрать контакты студентов и пригласить на мастер-класс.
Шаг 2. О чем будем чатиться?
Бота мы обязательно хотели сделать полезным, чтобы он продолжал жить и радовать всех и после Дней карьеры. После долгих раздумий и споров, такую тему нашли! В основу положили популярную в нашем городе онлайн-анкету Алексея Козионова на знание Новосибирского Академгородка. И за неделю до мастер-класса мы запустили в Telegram нашего чат-бота «Академик» @academic_quiz_bot.
«Академика» мы дополнили стикерпаком с подбадривающими фразочками от нашего талисмана – ebtman’а.
В первую неделю жизни бот также работал регистратором на мастер-класс и тщательно собирал контакты участников. А сейчас это просто развлекательный тест. Все, кто знает Академгородок, вэлкам проходить викторину.
Шаг. 3. Рецепт чат-бота викторины
Про создание чат бота с помощью Microsoft Bot Framework на Хабре писалось уже много. А вот туториалов – единицы. Поэтому для всех, кто ещё не запилил себе виртуального «болтуна», рассказываем наш рецепт.
Для начала создаём проект в Visual Studio с использованием Bot Application Template.
Копируем адрес и запускаем эмулятор.
Куда вставляем скопированный адрес и дописываем api/messages. Проверяем что всё работает.
Далее усовершенствуем нашего бота. Заставим задавать его вопросы и проверять ответы.
Для начала нам понадобятся данные для вопросов. Можно сделать это разными способами. Можно хранить локально или загружать из облака. Мы выбрали второй вариант.
Создадим простой класс для загрузки вопросов.
Этот класс при создании будет загружать вопросы с сервера и при необходимости возвращать следующий вопрос исключая те, на которые пользователь уже ответил.
Создадим новый класс в Visual Studio под названием QuizDialog. И реализуем в нём интерфейс IDialog<string>.
Реализуем функцию ShowQuestion. Сначала загрузим список уже пройденных вопросов из хранилища.
И запросим следующий вопрос
Если вопросов нет, то считаем квиз пройден и возвращаем управление в родительский диалог.
Далее отправляем текст вопроса пользователю.
Также картинки можно передавать не через url (хотя я считаю, что в telegram надёжнее именно так), а через Attachment.
Код функции BoldString:
Текст форматируем в «xml» чтобы разделить текст по строчкам и выделить строчку с номеров вопроса жирным цветом. Тут стоит учитывать, что не все мессенджеры поддерживают одинаковые форматы, тут стоит читать документацию.
В случае если пользователь написал что-то некорректное считаем его ответ неправильным. Вот такие мы злодеи.
Далее, нужно показать правильный ответ и статистику. И небольшим бонусов если пользователь общается с ботом через «telegram» подбодрить его стикером.
Далее в MessagesController нужно вызвать наш диалог.
После отладки в эмуляторе можно опубликовать бота. Вот тут это уже описано.
А наш проект целиком лежит вот тут.
Шаг 4. Подводим итоги
Этой студенческой весной мы научили молодежь писать собственных чат-ботов и собрали рекордное для нас количество участников на мастер-классе. Снова повстречались с фанатами У нас есть ребята, в смысле парень и девушка, которые ходят к нам на мастер-классы уже третий год подряд и, наконец, доросли, до 4 курса. Говорят, напишут диплом и сразу к нам (мы раньше 4-го курса студентов все равно не берем).
А еще, сами получили большое удовольствие от общения с молодежью и вдохновение для новых проектов! Ну и викторину нашу очень любим и рекомендуем всем, кто знаком с Академом — @academic_quiz_bot.
Очевидно, разработка технологий искусственного интеллекта становится одним из приоритетных направлений в деятельности Microsoft. В ходе пленарного выступления на конференции Build 2016 был анонсирован новый набор инструментов для разработки ботов — Microsoft Bot Framework.
Для создания ботов даже не потребуется глубокое знание программирования: основные возможности для обучения искусственного интеллекта новым словам и фразам, определенным сценариям и событиям доступны через наглядный интерфейс.
В этой статье мы создадим тестового бота с использованием Microsoft Bot Framework, обучим и протестируем его с помощью встроенного эмулятора. Идея бота проста – он должен понимать человеческий язык и отвечать, когда его спросят о погоде в каком-то городе.
Архитектура проекта
Итак, вот как будет выглядеть схема работы нашего бота:
Для краткости мы не будем рассказывать о процессе регистрации в Bot Framework и LUIS, так как никаких трудностей с этим возникнуть не должно. Также просим обратить внимание, что на данный момент Microsoft Bot Framework не поддерживает русский язык.
Используем LUIS
Видео, кратко объясняющее принцип работы LUIS:
Итак, после регистрации приложения в LUIS перед нами открывается довольно простой интерфейс, в котором мы можем натренировать наш ИИ на определенных фразах. В данном случае обучим его понимать вопросы о погоде:
LUIS разбивает приложения на действия, на этом скриншоте их три: погода (weather), состояние (condition) и место (location). Подробнее о действиях (intents) рассказано в официальном видео выше.
LUIS в действии
Теперь попытаемся использовать это в реальном боте.
Создание бота
3–5 декабря, Онлайн, Беcплатно
Теперь создадим новый проект с его использованием:
По сути, самый простой бот уже готов. Проверить, работает ли он, проще всего через встроенный эмулятор, который, по сути, является просто мессенджером, который подключен к нашему боту.
Запустив эмулятор, попробуем пообщаться с новосозданным ботом:
Интеграция с LUIS
Так как эта статья является вводом в Microsoft Bot Framework, то мы не будем публиковать тут все исходные коды, приведем лишь самые важные. Остальные мы разместили в GitHub-репозитории.
Шаг 1: Теория.
Кроме объединения вышеупомянутых технологий в одну модель в MVC был добавлен ряд дополнительных функций.
Паттерн MVC и с чем его едят.
По словам Википедии, паттерн (англ. design pattern) — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. Например способ проектирования "сверху вниз" можно отнести к одним из первых паттернов проектирования.
Model-View-Controller. MVC — это фундаментальный паттерн, который нашел применение во многих технологиях, дал развитие новым технологиям и каждый день облегчает жизнь разработчикам.
Впервые паттерн MVC появился в языке SmallTalk . Разработчики должны были придумать архитектурное решение, которое позволяло бы отделить графический интерфейс от бизнес логики, а бизнес логику от данных. Таким образом, в классическом варианте, MVC состоит из трех частей, которые и дали ему название.
Model.
Под Моделью, обычно понимается часть содержащая в себе функциональную бизнес-логику приложения. Модель должна быть полностью независима от остальных частей продукта. Модельный слой ничего не должен знать об элементах дизайна, и каким образом он будет отображаться. Достигается результат, позволяющий менять представление данных, то как они отображаются, не трогая саму Модель.
Модель обладает следующими признаками:
- Модель — это бизнес-логика приложения;
- Модель обладает знаниями о себе самой и не знает о контроллерах и представлениях;
- Для некоторых проектов модель — это просто слой данных (DAO, база данных, XML-файл);
- Для других проектов модель — это менеджер базы данных, набор объектов или просто логика приложения;
В обязанности Представления входит отображение данных полученных от Модели. Однако, представление не может напрямую влиять на модель. Можно говорить, что представление обладает доступом «только на чтение» к данным.
Представление обладает следующими признаками:
- В представлении реализуется отображение данных, которые получаются от модели любым способом;
- В некоторых случаях, представление может иметь код, который реализует некоторую бизнес-логику. Но только в некоторых случаях(!) и вообще я этого не говорил:-)
Примеры представления: HTML-страница, WPF форма, Windows Form.
Controller.
Контроллер обеспечивает «связи» между пользователем и системой . Контролирует и направляет данные от пользователя к системе и наоборот. Использует модель и представление для реализации необходимого действия.
- Контроллер определяет, какие представление должно быть отображено в данный момент;
- События представления могут повлиять только на контроллер.контроллер может повлиять на модель и определить другое представление.
- Возможно несколько представлений только для одного контроллера;
Основная идея этого паттерна в том, что и контроллер и представление зависят от модели, но модель никак не зависит от этих двух компонент.
Итак, контроллер перехватывает событие извне и в соответствии с заложенной в него логикой, реагирует на это событие изменяя Mодель, посредством вызова соответствующего метода. После изменения Модель использует событие о том что она изменилась, и все подписанные на это события Представления, получив его, обращаются к Модели за обновленными данными, после чего их и отображают.
Начинающие программисты очень часто трактуют архитектурную модель MVC как пассивную модель MVC: модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику. В результате — код моделей по факту является средством получения данных из СУБД, а контроллер — типичным модулем, наполненным бизнес-логикой. В результате такого понимания — MVC-разработчики стали писать код, который Pádraic Brady (известный в кругах сообщества «Zend Framework» (Толстые, тупые, уродливые контроллеры или ТТУК).
Наиболее наглядно эта проблема описана статье The M in MVC: Why Models are Misunderstood and Unappreciated Pádraic Brady. Вот перевод этой статьи.
Среднестатистический ТТУК получал данные из БД (используя уровень абстракции базы данных, делая вид, что это модель) или манипулировал, проверял, записывал, а также передавал данные в Представлении. Такой подход стал очень популярен потому, что использование таких контроллеров похоже на классическую практику использования отдельного php-файла для каждой страницы приложения.
Но в объектно-ориентированном программировании используется активная модель MVC, где модель — это не только совокупность кода доступа к данным и СУБД, но и вся бизнес-логика; также, модели могут инкапсулировать в себе другие модели. Контроллеры же, — как элементы информационной системы, — ответственны лишь за:
- приём запроса от пользователя;
- анализ запроса;
- выбор следующего действия системы, соответственно результатам анализа (например, передача запроса другим элементам системы).
Только в этом случае контроллер становится «тонким» и выполняет исключительно функцию связующего звена (glue layer) между отдельными компонентами информационной системы.
Ох уж эти паттерны… Я надеюсь что мои формулировки не взорвали моит немногочисленным читателям мозг. Если вы не поняли то, что я писал — не переживайте. Паттерны вообще не самая простая тема, а среди всех MV- паттернов — MVC, на мой взгляд, вообще является одним из самых сложных для понимания. Так или иначе я постарался доступно объяснить его суть. Это одна из тех вещей, которая коде выглядит не так страшно и более понятно. По этому погнали!
Шаг 2: Практика.
Проект, который создается в Visual Studio, будет во многом напоминать проект для MVC за тем исключением, что в нем не будет представлений.
Первым делом переименуем ValuesController.cs в MessageController , и выпилим оттуда все. Оставим пустой класс с обработкой GET -запроса:
Запустим нашу прилку и перейдем по ссылке localhost:XXXX/api/message/update . Получили результат Method GET unuvalable (ура мы крутые прогеры!).
Model first.
Для написания проекта будем использовать подход “model first”. Он заключается в том, что сначала необходимо разработать модель приложения и написать логику, затем нарисовать Представление, а уже потом склеить это дело контроллером.
Итак, нам нужен сам бот для телеги. Давайте опишем его модель. Пошли кодить? Неет. Сначала обдумаем а как эту модель реализовать.
У бота есть несколько параметров конфигурации: токен, имя, и url сайта, где он лежит. Значит это настройки бота. и их можно описать в отдельном классе. Создадим папку Models а в ней класс AppSettings.cs:
Отлично! Теперь опишем бота? Подождите. Бот такая сущность которая должна содержать команды и выполнять их. А значит нам нудны еще эти самые команды. Как должна выглядеть команда? Каждая команда как-то называется, значит содержит свойство Name. Команда должна определять вызвали ее или нет: содержать булеву функцию Contains(. ) . И уметь выполнять себя - Execute(. ) . И последнее: команд может быть много, значит нужен какой то абстрактный класс.
Теперь создадим папку Commands внутри папки Models и запихнем туда класс Command.cs:
Здесь Execute возвращает не void, а Task, так как команда может выполняться и асинхронно.
Ну что же, пришла пора писать бота. Любой телеграм бот должен содержать клиента TelegramBotClient, а также наш бот должен содержать команды. Их будет много, а значит нам нужна их коллекция. К томуже бот должен уметь возвращать TelegramBotClient-а для вызова его из команд.
Создаем класс Bot.cs:
Я думаю, комментарии излишни.
Теперь научим его приветствовать нас. Добавим класс StartCommand.cs:
Осталось сконфигурировать бота, и сказать нашему приложению, что бот у нас есть. Идем в класс Startup и в методе Configure приписываем в конец:
Финальный аккорд. Добавим клея!
Литература
Вот скромный список того, что удалось найти:
Как видите список даже англоязычной литературы ограничивается тремя книгами. А официальных книг от MS нет даже по первой версии. Но метод научного тыка никто не отменял!
Читайте также: