По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Model-View-Controller - популярный шаблон программирования, где логика приложения делится на три различных компонента. В этой статье расскажем о роли компонентов архитектуры MVC, начнем с короткой истории, а далее покажем, как её можно использовать в приложении. История паттерна Model View Controller Модель MVC была впервые представлена в 1979 году учёным Трюгве Миккьелем Хейердалом Реенскаугом. Он хотел придумать решение, как разбить сложное пользовательское приложение на более мелкие управляемые компоненты. Шаблон MVC был впервые использован в языке программирования Small Talk. Изначально шаблоне хотели назвать «Model-View-Editor», но затем оно было изменено на «Model-View-Controller». В 1980-х и начале 90-х годов шаблон MVC использовался главным образом в настольных приложениях. Но к концу 1990-х годов она стала довольно популярной в разработке веб-приложений. В современных веб-приложениях шаблон MVC является популярным архитектурным дизайном для организации кода. Ниже приведен список нескольких популярных веб-фреймворков, использующих шаблон MVC: Ruby on Rails ASP.NET MVC Laravel Angular Какие три компонента включает в себя MVC? Шаблон программирования MVC состоит их трёх следующих компонентов: Model – отвечает за логику данных, лежащую в основе приложения View – это видимая часть приложения, то с чем взаимодействует пользователь Controller – работает как мозг приложения и обеспечивает связь между моделью и видом Как шаблон MVC работает в веб-приложении? Чтобы лучше понять, как работает шаблон MVC, лучше всего показать его в демонстрационном приложении. Это приложение стека MERN (MongoDB, Express, React, Node) своего рода помощник менеджера офиса и отображает таблицу недавно нанятых тренеров средней школы. Он также показывает, какие тренеры не сдали тесты на туберкулез, не прошли вакцинацию от Covid, не заполнили резюме и не прошли проверку. Менеджер может отправлять напоминания по электронной почте тем тренерам, у которых отсутствуют документы. Компонент Model Модель отвечает за логику данных нашего приложения. Мы используем MongoDB для базы данных тренеров. Для начала определяем свойства, которые будут применены к каждому тренеру в базе данных. У каждого тренера есть свойства name, email, program, application, backgroundCheck, tbTest и covidTest. const coachSchema = new Schema({ name: { type: String, trim: true, maxLength: 32, required: true }, email: { type: String, trim: true, maxLength: 32, required: true, unique: true }, program: { type: String, trim: true, maxLength: 32, required: true }, application: { type: Boolean, required: true }, backgroundCheck: { type: Boolean, required: true }, tbTest: { type: Boolean, required: true }, covidTest: { type: Boolean, required: true } }, { timestamps: true }) type: Boolean представляет значение true или false для свойств приложения, backgroundCheck, tbTest и covidTest. Если у тренера одно из этих четырех свойств, помечены как false, это означает, что они не завершили процесс найма. Создаем семь записей для нашей базы данных тренеров, и эта информация хранится в MongoDB Atlas. Ниже приведен пример одной из записей базы данных. Компонент "контроллер"" будет взаимодействовать с базой данных и получать необходимую информацию для отправки компоненту представление. Компонент View Компонент View (вид, представление или вью) отвечает за все визуальные аспекты приложения. Для отображения данных пользователю мы использовали React. При первой загрузке приложения на экране отображается приветственное сообщение. При нажатии кнопки «View Dashboard» происходит переход к таблице тренеров и списку отсутствующих документов. Компонент Вид не взаимодействует напрямую с базой данных, поскольку это делает наш контроллер. Контроллер предоставляет эту информацию компоненту представление, чтобы ее можно было отобразить на странице. Вот как выглядит код, когда представление выполняет вызов выборки (fetch) для получения данных от контроллера: await fetch('https://mvc-project-backend.herokuapp.com/coaches') Затем мы используем метод map(), чтобы пройтись по списку тренеров и отобразить их имена, адреса электронной почты и программу в виде таблицы. coachData.map(data => ( <tr key={data._id}> <td>{data.name}</td> <td>{data.email}</td> <td>{data.program}</td> </tr> )) Для отображения раздела отсутствующих документов мы отправляем запрос к бэкнэду и получием список тренеров, которые не заполнили анкету, не сдали тесты на туберкулез, не привиты от Covid и не прошли проверки. Для отображения имен для каждой категории снова используется метод map(). Если нажать кнопку «Send reminder email», эта информация будет отправлена React-ом на бэкэнд. Контролер отвечает за отправку сообщения электронной почты и обмен информацией с компонентом представление о том, отправилось ли сообщение. На основе информации, которую он получает от контроллера, во View отображается сообщение об успехе или сообщение об отказе. Компонент Controller Контроллер взаимодействует с компонентами «Модель» и «Представление» и выполняет все логические операции для нашего приложения. Этот раздел кода был построен в Node.JS и Express. Контролер получает полный список тренеров из «Модели» и отправит эту информацию в «Представление». Контролер также отвечает за фильтрацию через «Модель» и предоставление списка тренеров, которые не сдали необходимые документы. Все эти данные отправляются в «Представление», чтобы их можно было отобразить пользователю. Что касается функциональности электронной почты, то «Контролер» перед отправкой проверяет валидность адреса электронной почты. Для отправки электронных писем использована Nodemailer: transporter.sendMail(mailOptions, (err) => { if (err) { console.log(`Applications: There was an error sending the message: ${err}`) res.json({ status: 'Email failure' }) } else { console.log(`Applications Success: Email was sent`) res.json({ status: "Email sent" }); } }) Если сообщение электронной почты успешно отправлено, пользователь получает уведомление, и сообщение электронной почты отображается в почте демонстрационной учетной записи. Если при отправке сообщения возникает ошибка, то «Контроллер» посылает эту информацию в «Вид», чтобы пользователю отобразилось уведомление об ошибке. Заключение А в заключение повторим пройденное: Model-View-Controller - популярный шаблон программирования, используемый для разделения логики приложения на три различных компонента. Хотя шаблон MVC первоначально использовался в настольных приложениях, в конце 1990-х он стал популярным в разработке веб-приложений. Модель отвечает за логику данных, лежащую в основе приложения. Представление - это то, что пользователь видит в приложении и взаимодействует с ним. Контроллер действует как мозг приложения и взаимодействует с моделью и представлением. Веб-инфраструктуры, использующие шаблон MVC - это Ruby on Rails, ASP.NET MVC, Laravel и Angular.
img
Хочу рассказать, как с минимальным даунтаймом на продакшн оборудовании настроить EtherChannel. Для начала нужно подключить оборудование, и оно начнет работать в режиме STP. На коммутаторе уровня агрегации (ядра) в зависимости от топологии нужно узнать порты к которому подключено оборудование. Для этого есть команда show cdp neighbors, которую нужно запустить на коммутаторе уровня доступа. Так удобней будет. Для мониторинга запускаем PING на IP коммутатора. После этого выключаем порт, который заблокирован по протоколу STP. Советую сделать это на коммутаторе агрегации (ядра). Далее по очереди настраиваем логический порт на обоих коммутаторах. AccSwitch-2#conf t AccSwitch-2(config)#int port-channel 1 AccSwitch-2(config-if)#switchport mode trunk CoreSW#conf t CoreSW(config)#int port-channel 10 CoreSW(config)#switchport mode trunk После этого уже настраиваем отключенный физический порт: AccSwitch-2(config-if)#int gi1/0/47 AccSwitch-2(config-if)#switchport mode trunk AccSwitch-2(config-if)#channel-group 1 mode on CoreSW (config-if)#int gi2/0/38 CoreSW (config-if)#switchport mode trunk CoreSW (config-if)#channel-group 10 mode on Для начала ставим минимальную настройку. Но если на свитчах настроен DHCP Snooping или Dynamic Arp Inspection, то под логическим и физическим транк портом нужно прописать ip dhcp snooping trust и ip arp inspection trust. После того как все настройки сделаны и проверены можно включить настроенный порт не отключая работающий. В этом случае должен потеряться максимум один PING, что совсем не критично так, как TCP сессия не обрывается. Далее выключаем уже другой порт, настраиваем аналогично и включаем. Внимание, после этого все настройки на UpLink портах нужно производить на логическом интерфейсе. Все изменения автоматически применяются на порты, которые входят в port-channel. Надеюсь статья окажется полезной!
img
Одна из предыдущих статей была посвящена созданию групп перехвата в OpenScape Voice. Сейчас мы поговорим про другой тип групп – группы поиска или Hunt Groups. /p> Теория Hunt группа представляет из себя несколько телефонных номеров, объединенных в одну группу внутри которой происходит распределение вызова по определенному алгоритму. Для вызова группы используется либо отдельный внутренний номер (Pilot Hunt Group), либо номер, состоящий в группе (Master Hunt Group). В одной группе может находиться 2048 номеров, а один номер может находиться в 32 группах одновременно. Рассмотрим алгоритмы распределения вызовов в группе. Circular (Циклический) - Распределение вызовов происходит по порядку, согласно списку абонентов. Если абонент не отвечает, то через заранее определенное время вызов передается следующему абоненту из списка, и так далее. Если последний абонент не ответил, то вызов снова передается первому. Новый вызов адресуется абоненту, который идет в списке за тем, который принял предыдущий вызов. Linear (Линейный) - Распределение вызовов так же происходит по порядку, согласно списку абонентов, и если абонент не отвечает, то вызов передается следующему. Но отличие состоит в том, что новый вызов всегда адресуется первому свободному абоненту в списке. Manual – Application Controlled (Управляемый внешним приложением) - Распределением вызовов управляет внешнее приложение по протоколу CSTA. Parallel – Call Pickup Model (Параллельный, на основе перехвата вызова) - Для распределения используется циклический алгоритм и при этом дополнительно всем свободным абонентам группы посылается уведомление о вызове, и вызов может быть перехвачен любым свободным абонентом. Абонент может быть включен только в одну группу такого типа, и не может одновременно быть членом другой стандартной группы перехвата. Parallel – Simultaneous Alerting Model (Параллельный, на основе одновременного вызова) - Одновременный вызов всем участникам группы. UCD – Uniform Call Distribution (Универсальный) - Вызов адресуется абоненту, который был свободен дольше других. Если абонент не отвечает, то вызов передается следующему абоненту, который был свободен дольше других и так далее. Настройка группы поиска Создадим номер вызова группы. Для этого перейдем во вкладку Configuration → OpenScape Voice → Business Group → Members → Subscribers и нажмем на Add. Во вкладке General указываем номер для группы в строке Directory Number и в строке Type of Number указываем тип номера → Public для городского и Private для корпоративного. Переходим на вкладку Connection и в Connection Information указываем Profile Only После создания номера приходим в меню Configuration → OpenScape Voice → Business Group → Teams - Hunt Groups и нажмем на Add для создания Hunt группы. Во вкладке General нужно указать название группы в строке Name, ниже в строке Pilot Directory Number указать номер группы, который мы создавали до этого и в поле Type в выпадающем списке выбрать алгоритм распределения вызова. Также в этом меню и во вкладке Advance можно выставить дополнительные настройки очереди. Добавлять абонентов в группе можно во вкладке Members, нажав на кнопку Add. В строке Directory Number указываем внутренний номер абонента, и также можем сразу указать в поле Position порядковый номер абонента в списке. После добавления номера появляются в списке, в котором можно изменять позицию номера при помощи кнопок Move Up и Move Down. Добавлять телефон в группу можно еще из меню настроек номера Configuration → OpenScape Voice → Business Group → Members - Subscribers во вкладке Groups, где нужно указать либо номер, либо имя группы, и нажать затем Save.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59