Лучший подход к модульному программированию в Delphi

это продолжение дискуссии, которую я начал здесь . Я хотел бы найти лучший способ разбить исходный код Delphi на модули, поскольку у меня нет опыта в этой области. Буду признателен за все ваши предложения.

Разрешите разместить то, что я уже написал там .

Программное обеспечение, разработанное компанией, в которой я работаю, состоит из более чем 100 модулей (большинство из них что-то вроде драйверов для разных устройств). Большинство из них используют один и тот же код - в большинстве случаев классы. Проблема в том, что эти классы не всегда помещаются в отдельные автономные блоки PAS. Я имею в виду, что общий код часто помещается в блоки, содержащие код, специфичный для модуля. Это означает, что когда вы исправляете ошибку в общем классе, недостаточно скопировать модуль PAS, в котором он определен, во все программные модули и перекомпилировать их. К сожалению, вам придется копировать и вставлять фиксированные фрагменты кода в каждый модуль, один за другим, в соответствующий модуль и класс. Это занимает много времени, и это то, что я хотел бы устранить в ближайшем будущем, выбрав правильный подход - пожалуйста, помогите мне.

Я думал, что использование BPL, распространяемых с EXE, было бы хорошим решением, но в нем есть некоторые недостатки, как некоторые упоминали во время предыдущего обсуждения. Наихудшая проблема заключается в том, что если каждому EXE требуется несколько BPL, сотрудники нашей службы технической поддержки должны будут знать, какие EXE нужны какие BPL, а затем предоставить конечным пользователям соответствующие файлы. Пока у нас нет средства обновления программного обеспечения, это будет очень полезно как для наших технических специалистов, так и для конечных пользователей. Они обязательно заблудятся и рассердятся: - /.

Также могут возникнуть проблемы с совместимостью - если один BPL используется многими EXE, модификация этого BPL может быть хорошей для одного EXE и плохой для некоторых других.

Что мне делать, чтобы быстрее исправлять ошибки в так много проектов? Я думаю об одном из следующих подходов. Если у вас есть лучшие идеи, дайте мне знать.

  • Поместите общий код в отдельные и автономные блоки PAS, поэтому, когда в одном из них есть исправление ошибки, достаточно скопировать его во все проекты (перезаписать старые файлы ) и перекомпилируйте их все. Это означает, что каждый модуль копируется столько раз, сколько проектов он используется.

Это решение кажется нормальным в том, что касается редко изменяемого кода. Но у нас также есть блоки pas с функциями и процедурами общего пользования, которые часто претерпевают модификации. Было бы невозможно выполнять одну и ту же процедуру (копирования и перекомпиляции такого количества проектов) каждый раз, когда кто-то добавляет новую функцию в этот файл.

  • Создайте BPL для всего общего кода, но свяжите их с EXE, чтобы EXE были автономный.

На мой взгляд, сейчас это лучшее решение, но есть некоторые минусы. Если я исправлю ошибку в BPL, каждый программист должен будет обновить BPL на своем компьютере. Что, если они забудут это сделать? Однако я думаю, что это небольшая проблема. Если мы позаботимся об информировании друг друга об изменениях, все должно быть в порядке. Как вы думаете?

  • И последняя идея, предложенная CodeInChaos (не знаю, правильно ли я ее понял). Совместное использование файлов PAS между проектами. Вероятно, это означает, что нам придется хранить общий код в отдельной папке и заставлять все проекты искать этот код там, верно? И всякий раз, когда необходимо изменить проект, я думаю, его нужно будет загрузить из SVN вместе с папкой общих файлов. Каждое изменение общего кода должно вызывать перекомпиляцию каждого проекта, в котором используется этот код.

Пожалуйста, помогите мне выбрать хорошее решение. Я просто не хочу, чтобы компания теряла на исправление ошибок гораздо больше времени и денег, чем необходимо, только из-за глупого подхода к разработке программного обеспечения. Пока это никого не волновало, и вы можете представить, сколько проблем это вызывает.

Большое спасибо.

11
задан Community 23 May 2017 в 12:29
поделиться