МАРШРУТИЗАЦІЯ НА ОСНОВІ АТРИБУТІВ ДЛЯ ОБРОБКИ ПОВІДОМЛЕНЬ ТЕЛЕГРАМ-БОТІВ
DOI:
https://doi.org/10.32689/maup.it.2025.3.17Ключові слова:
маршрутизація на основі атрибутів, Telegram Bot, декларативні атрибути, .NET, впровадження залежностей, модульна архітектура, масштабованістьАнотація
Метою даної статті є розробка та аналіз механізму маршрутизації оновлень Telegram-бота на основі атрибутів. Дослідження спрямоване на демонстрацію того, як декларативні атрибути можуть підвищити модульність, зручність підтримки та масштабованість у порівнянні з традиційними імперативними методами диспетчеризації.У роботі застосовано атрибутивно-орієнтоване програмування (AOP) у середовищі .NET у поєднанні з інверсією керування та механізмом впровадження залежностей. Запропонована архітектура побудована навколо центрального компонента UpdatesBus, який динамічно визначає обробники, позначені користувацькими атрибутами. Логіка фільтрації реалізована у вигляді багаторазово застосовних фільтрів (AllowedChatsAttribute, AllowedUpdateTypeAttribute тощо), а використання регулярних виразів дозволяє реалізувати складні сценарії маршрутизації. Методологія перевірена на прикладах практичних ботів та експериментальному аналізі продуктивності.Новизна роботи полягає у застосуванні атрибутивної маршрутизації, поширеної у веб-фреймворках на зразок ASP.NET Core, до сфери Telegram-ботів. На відміну від існуючих бібліотек з подійною або командною диспетчеризацією, запропонований підхід вводить декларативну модель із автоматичним пошуком обробників та передаванням аргументів. Це забезпечує баланс між гнучкістю, продуктивністю та зручністю підтримки, дозволяючи розширювати функціонал без змін у центральному диспетчері.Висновки. Атрибутивна маршрутизація є масштабованим та зручним для підтримки рішенням у розробці Telegram-ботів. Експериментальні результати показали незначні витрати часу виконання порівняно з імперативними методами, при цьому суттєво покращується читабельність та модульність коду. Запропонований підхід придатний як для невеликих, так і для промислових ботів, а подальший розвиток може включати інтеграцію генераторів коду для зменшення витрат на рефлексію.
Посилання
Bergmans L., Lopes C. V. Aspect-oriented programming. In S. Demeyer & J. Bosch (Eds.), Object-oriented technology: ECOOP’99 workshop reader. Lecture Notes in Computer Science, 1999. vol. 1743, pp. 288–313. Springer. https://doi.org/10.1007/3-540-46589-8_17
Butland A. Dependency Injection in ASP.NET Core Attributes. 2020, June 9. URL: https://www.andybutland.dev/2020/06/dependency-injection-in-aspnet-core-attributes.html (September 16, 2025).
Fowler, M. Inversion of control containers and the dependency injection pattern. 2004. URL: https://martinfowler.com/articles/injection.html (September 16, 2025)
Mens K., Lopes C., Tekinerdogan B., Kiczales G. Aspect-oriented programming. In M. Aksit (Ed.), ECOOP’97 workshops: Proceedings of the 11th European conference on object-oriented programming. Lecture Notes in Computer Science, 1998. vol. 1357, pp. 483–496. Springer. https://doi.org/10.1007/3-540-69687-3_88
Microsoft. Attribute routing in ASP.NET Web API 2. Microsoft Learn. 2014. URL: https://learn.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 (September 16, 2025).
Microsoft. Introducing C# Source Generators. The .NET Blog. 2020, April 29. URL: https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/
Microsoft. Routing to controller actions in ASP.NET Core. Microsoft Learn. 2023. URL: https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/routing (September 16, 2025).
Microsoft. (2024, November 12). Reflection versus source generation in System. Text. Json. URL: https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/reflection-vs-source-generation (September 16, 2025).
Microsoft. (n.d.). Attributes in C#. MSDN documentation. URL: https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/attributes (September 16, 2025).
##submission.downloads##
Опубліковано
Як цитувати
Номер
Розділ
Ліцензія

Ця робота ліцензується відповідно до Creative Commons Attribution 4.0 International License.





