MYSTERYMAN 67 Опубликовано 17 июля, 2017 (изменено) Доброго времени суток, в данной статье я хочу поговорить по поводу организации архитектуры проектов. За многолетнюю историю на поприще программирования игровых режимов сложилась тенденция писать всю логику в один файл, что в корне неверно и является дурным тоном и в современном мире является признаком некоторой бездарности программиста. Данная тенденция сложилась ешё в зародыше развития мультиплеера и связи с этим дожила до наших дней, но она является не практичной, так как при увеличении количества кода возрастает и сложность его чтения. Для того чтобы в процессе изменения вашей программы не создавались накладные расходы, следует придерживаться грамотно спроектированной архитектуры вашего проекта, давайте определимся что же такое хорошая архитектура. Хорошая архитектура — это архитектура, делающая процесс разработки и сопровождение программы более простым и эффективным. Программа с хорошей архитектурой легче поддаётся расширению и изменению, а также тестированию. Так как большинство игровых режимов написано одним большим монолитом, то к ним данное определение никак не подходит. И решение этому есть, разбиение программы на ряд независимых программ, называемых модулями, сам процесс разбиения программы называется декомпозицией. Декомпозиция программы — принцип разделения сложных систем и процессов на множество простых отдельных частей, которые согласованно взаимодействуют друг с другом. Идея декомпозиции состоит в разбиении программы на такие части, как: заголовочный файл модуля; файл реализации модуля. В заголовочный файл помещают определение данных используемые файлом реализации, а также прототипы используемых функции.Файл реализации содержит в себе основную логику вашей программы. Также, следует заметить, что если вашей программе разные модули используют единые функции, то такие функции следует выносить в общий модуль. Ваш проект может быть организован подобным образом: В файле main.pwn происходит подключение всех модулей, и он cодержит в себе следующий листинг: //HEADER #include "header/core/core_connection_db.inc" #include "header/core/core_gamemode.inc" #include "header/core/core_timer.inc" //FUNCTION #include "functions/core/core_connection_db.pwn" #include "functions/core/core_gamemode.pwn" //MODULE #include "module/core/core_connection_db.pwn" #include "module/core/core_gamemode.pwn" #include "module/core/core_timer.pwn" У вас наверное возник вопрос, а как же происходит взаимодействие с колбеками, а производится оно с помощью деректив препроцессора, пример данного взаимодействия представлен в листинге ниже: public OnGameModeInit() { #if defined GM_Settings_OnGameModeInit return GM_Settings_OnGameModeInit(); #else return 1; #endif } #if defined _ALS_OnGameModeInit #undef OnGameModeInit #else #define _ALS_OnGameModeInit #endif #define OnGameModeInit GM_Settings_OnGameModeInit #if defined GM_Settings_OnGameModeInit forward GM_Settings_OnGameModeInit(); #endif На этом всё, надеюсь вы стали более образованными и будете применять данную практику в разработке. P.S: Возможно дополню данную статью в дальнейшем, т.к. некоторые моменты выглядят весьма дико и незакончено. Изменено 17 июля, 2017 пользователем MYSTERYMAN 9 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Web 417 Опубликовано 17 июля, 2017 Наконец-то годнота на портале. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Miron_Moraev 21 Опубликовано 13 августа, 2017 может так, или я не так понял) ? //HEADER #include "../source/header/core/core_connection_db.inc" #include "../source/header/core/core_gamemode.inc" #include "../source/header/core/core_timer.inc" //FUNCTION #include "../source/functions/core/core_connection_db.pwn" #include "../source/functions/core/core_gamemode.pwn" //MODULE #include "../source/module/core/core_connection_db.pwn" #include "../source/module/core/core_gamemode.pwn" #include "../source/module/core/core_timer.pwn" А так мне оч понравилось) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
MYSTERYMAN 67 Опубликовано 5 ноября, 2017 Бамп Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Web 417 Опубликовано 11 января, 2021 Бамп для быдлокодеров 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты