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