Размер модуля...
Модератор: Модераторы
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Размер модуля...
Собственно, это такой отвлеченный вопрос по «рекомендуемому стилю кодирования». Имеет ли значение размер модуля? Стоит ли разбивать большой модуль на несколько, если логическая структура этого не требует (но позволяет)? С какого размера начинать разбиение?
Иван Шихалев писал(а):Собственно, это такой отвлеченный вопрос по «рекомендуемому стилю кодирования». Имеет ли значение размер модуля? Стоит ли разбивать большой модуль на несколько, если логическая структура этого не требует (но позволяет)? С какого размера начинать разбиение?
А можно поподробнее. Что в модуле, набор подпрограмм + переменные + типы?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Mikhail, имхо, речь о "средней температуре по палате".
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Mikhail писал(а):А можно поподробнее. Что в модуле, набор подпрограмм + переменные + типы?
А что от этого зависит? Существенное условие я указал в самом начале:
Иван Шихалев писал(а):логическая структура этого не требует (но позволяет)
Иван Шихалев писал(а):А что от этого зависит? Существенное условие я указал в самом начале:
Я, обычно, смотрю не на число строк, а на число объектов, т.е. переменных, подпрограмм, типов, классов, констант,...
Их должно быть немного, в пределах сотни. Подпрограмм, желательно, не более 20-30.
А если у тебя такая насыщенная компонентами форма. Развитое меню, множество вкладок и полей ввода/редактирования?
Там одних обработчиков событий может быть несколько сотен, да еще обработка данных, файловый ввод/вывод, ...
Я инклудами решаю проблему огромности модуля. Всяческими HandleEvents.inc, SourseData.inc, Report.inc, ...
Там одних обработчиков событий может быть несколько сотен, да еще обработка данных, файловый ввод/вывод, ...
Я инклудами решаю проблему огромности модуля. Всяческими HandleEvents.inc, SourseData.inc, Report.inc, ...
Я, обычно, смотрю на то, чтобы мне было не тяжело лазить по исходнику. Если становится тяжело - разбиваю на файлы руководствуясь для одного файла какой-то общей логической связью, например события какой-то, связанной между собой, группы компонентов.
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
vada писал(а):А если у тебя такая насыщенная компонентами форма.
А это уже означает, что логическая структура не позволяет.
нужно чтобы в модуле было не более 1000 строк кода
иначе рано или поздно получается что в коде чёрт ногу сломит
Как вариант можно часть кода вынести в include-файл, но не так, чтобы просто вынести, к примеру, всю секцию implementation, а чтобы было какое-то логическое основание, чтобы его вынести. Модули с формами тоже можно разбить на множество меньших модулей или include-файлов
Я часто делаю чтобы был один класс ~ один модуль, а если нужны ещё и процедуры, то их ставить в отдельный модуль
А ещё не надо делать чтобы были uses-секции в implementation, то есть, чтобы не было круговых зависимостей в модулях, иначе, опять же, чёрт ногу сломит в коде (ну а если кого-то чёрт не волнует, те могут конечно делать модули по 100 000 строк)
Добавлено спустя 4 минуты 46 секунд:
да кстати за 100 строк похоже никто не проголосовал, т.к если делать модули по 100 строк, то это так же как и большие модули приведёт к тому, что чёрт сломит в коде ногу
Добавлено спустя 5 минут 41 секунду:
другое дело что чтобы было везде оптимальное число строк кода, нужно либо с самого начала знать все требования и проработать в деталях весь дизайн, либо, как я обычно делаю, придумывать всё по ходу и постоянно переписывать. Когда в модуле накапливается больше 1000 строк кода, надо выносить код в отдельный модуль. А так как все такие л*****е з*****ы, то модули засираются, и кончается это плохо
иначе рано или поздно получается что в коде чёрт ногу сломит
Как вариант можно часть кода вынести в include-файл, но не так, чтобы просто вынести, к примеру, всю секцию implementation, а чтобы было какое-то логическое основание, чтобы его вынести. Модули с формами тоже можно разбить на множество меньших модулей или include-файлов
Я часто делаю чтобы был один класс ~ один модуль, а если нужны ещё и процедуры, то их ставить в отдельный модуль
А ещё не надо делать чтобы были uses-секции в implementation, то есть, чтобы не было круговых зависимостей в модулях, иначе, опять же, чёрт ногу сломит в коде (ну а если кого-то чёрт не волнует, те могут конечно делать модули по 100 000 строк)
Добавлено спустя 4 минуты 46 секунд:
да кстати за 100 строк похоже никто не проголосовал, т.к если делать модули по 100 строк, то это так же как и большие модули приведёт к тому, что чёрт сломит в коде ногу
Добавлено спустя 5 минут 41 секунду:
другое дело что чтобы было везде оптимальное число строк кода, нужно либо с самого начала знать все требования и проработать в деталях весь дизайн, либо, как я обычно делаю, придумывать всё по ходу и постоянно переписывать. Когда в модуле накапливается больше 1000 строк кода, надо выносить код в отдельный модуль. А так как все такие л*****е з*****ы, то модули засираются, и кончается это плохо
- Vapaamies
- постоялец
- Сообщения: 292
- Зарегистрирован: 24.07.2012 22:37:59
- Откуда: Санкт-Петербург
- Контактная информация:
В своем проекте я всякие нудные определения во включаемые файлы выношу, особенно платформенные, если в одном модуле перемешан и платформенный, и ОО-код. Еще, наверное, ассемблер будет хорошо выноситься, поскольку он тоже длинный и нудный. У меня пока нет такого количества ассемблерных вставок, чтобы проверить, а заимствования из FastCode и так в отдельных файлах.
В остальном же полезно иметь классы целиком в файле модуля, чтобы по Ctrl+Shift+Вверх/Вниз удобно перемещаться (Delphi). Пока самый большой модуль у меня порядка 2800 строк.
В остальном же полезно иметь классы целиком в файле модуля, чтобы по Ctrl+Shift+Вверх/Вниз удобно перемещаться (Delphi). Пока самый большой модуль у меня порядка 2800 строк.
В интернете есть куча бесплатных утилит для оценки качества исходного кода.
Попробуйте воспользоваться поисковыми серверами для нахождения оных и "покурить" результаты обработки своих исходников...
Попробуйте воспользоваться поисковыми серверами для нахождения оных и "покурить" результаты обработки своих исходников...
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
PapaNT писал(а):куча бесплатных утилит
Это, конечно, замечательно. Вот только к вопросу отношения не имеет.
Добавлено спустя 6 минут 37 секунд:
PapaNT писал(а):куча бесплатных
Ну, и это, мягко говоря, неправда. Если речь о pascal-коде идет.
Блин, не за то проголосовал ._.
Думаю разбиение по 1000 строк самый оптимальный вариант.
Думаю разбиение по 1000 строк самый оптимальный вариант.
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Helltar писал(а):Блин, не за то проголосовал
В данном опросе можно менять свое мнение.
Иван Шихалев писал(а):Имеет ли значение размер модуля? Стоит ли разбивать большой модуль на несколько, если логическая структура этого не требует (но позволяет)?
Ориентироваться, прежде всего, стоит именно на логическую структуру, а не количество строк. Но все-же не совсем понятна формулировка "не требует, но позволяет". У меня есть модуль XmlRpc.Types количство строк в котором приближается к 15 тыс. Там описаны только базовые типы и работа с ними. Ничего лишнего. По идее, я мог бы выделить каждый тип в отдельный модуль, но это будет означать, что мои пользователи вместо Uses XmlRpc.Types; вынуждены будут писать Uses XmlRpc.Value, XmlRpc.Array, XmlRpc.Struct и так далее. Мне эта идея не нравится. Однако, если бы в ObjectPascal была нормальная реализация пространств имен я не задумываяь разделил бы такой большой файл, но не потому что он такой большой, а потому, что в этом случае такое деление выглядело бы логичным.
