Это продолжение обсуждения, которое я начал здесь. Я хотел бы найти лучший способ модульного использования исходного кода Delphi, поскольку я не имею опыта в этом поле. Я буду благодарен за все ваши предложения.
Позвольте мне опубликовать то, что я уже написал там.
Программное обеспечение, разработанное компанией, в которой я работаю, состоит из более чем 100 модулей (большинство из них являются чем-то вроде драйверов для разных устройств). Большинство из них имеют один и тот же код - в большинстве случаев - классы. Проблема в том, что эти классы не всегда помещаются в отдельные автономные блоки PAS. Я имею в виду, что общий код часто помещается в единицы, содержащие код, специфичный для модуля. Это означает, что при исправлении ошибки в общем классе недостаточно скопировать блок PAS, который он определен во всех программных модулях, и перекомпилировать их. К сожалению, вы должны копировать и вставлять фиксированные фрагменты кода в каждый модуль, один за другим, в соответствующий блок и класс. Это занимает много времени, и это то, что я хотел бы устранить в ближайшем будущем, выбрав правильный подход - пожалуйста, помогите мне.
Я думал, что использование BPL, распространяемых вместе с EXE, будет хорошим решением, но у него есть некоторые недостатки, о чем упоминалось в предыдущем обсуждении. Худшая проблема заключается в том, что если для каждого EXE требуется несколько BPL, наши специалисты по технической поддержке должны будут знать, какие EXE нужны, какие BPL, а затем предоставить конечным пользователям правильные файлы. Пока у нас нет обновления программного обеспечения, это будет очень полезно для наших технических специалистов и конечных пользователей. Они наверняка потеряются и разозлится: -/.
Также могут возникнуть проблемы с совместимостью - если одна BPL разделяется многими EXE, модификация этой BPL может быть хорошей для одного EXE и плохого для некоторых других.
Что мне делать, чтобы быстрее исправить ошибки во многих проектах? Я думаю об одном из следующих подходов. Если у вас есть идеи, пожалуйста, дайте мне знать.
- Поместите общий код в отдельные и автономные блоки PAS, поэтому, когда в одном из них есть исправление ошибки, достаточно скопировать его во все проекты (перезаписать старые файлы) и перекомпилировать все из них. Это означает, что каждый блок копируется столько раз, сколько он использует.
Это решение кажется ОК в отношении редко модифицированного кода. Но у нас также есть модули pas с функциями и процедурами общего пользования, которые часто претерпевают изменения. Было бы невозможно выполнить ту же процедуру (копирование и перекомпиляцию так много проектов) каждый раз, когда кто-то добавляет новую функцию в этот файл.
- Создайте BPL для всего общего кода, но свяжите их с EXE, чтобы EXE были автономными.
Теперь мне кажется, что это лучшее решение, но есть некоторые минусы. Если я исправлю ошибку в BPL, каждый программист должен будет обновить BPL на своем компьютере. Что, если они забудут это сделать? Однако, я думаю, это небольшая проблема. Если мы позаботимся об информировании друг друга об изменениях, все должно быть в порядке. Как вы думаете?
- И последняя идея, предложенная CodeInChaos (я не знаю, правильно ли я ее понял). Совместное использование файлов PAS между проектами. Вероятно, это означает, что нам нужно будет хранить общий код в отдельной папке и делать все проекты для поиска этого кода, верно? И всякий раз, когда необходимо изменить проект, он должен быть загружен из SVN вместе с папкой с общими файлами, я думаю. Каждое изменение в общем коде должно было бы перекомпилировать каждый проект, который использует этот код.
Пожалуйста, помогите мне выбрать хорошее решение. Я просто не хочу, чтобы компания теряла гораздо больше времени и денег, чем необходимо, в исправлениях, просто из-за глупого подхода к разработке программного обеспечения. До сих пор никто не заботился об этом, и вы можете себе представить, сколько проблем оно вызывает.
Большое спасибо.