предисловие: может, это уже обсуждалось, а моё поиск-фу плохое, тогда ткните, пожалуйста.

заметил тут за собой, что в процессе обсуждений не всегда делаю разницу между понятием «компонент» и «библиотека». а разница есть, и довольно важная, как мне кажется.

библиотека — это набор полезных вещей, предназначеных для активного повторного использования. а компонент — это чёрный ящик, который используется для комбинаторного построения конечной системы.

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

в качестве примера можно взять TextModels и TextMappers: это скорее библиотеки — для «длинных строк» и простого их парзинга. и они используются в BBCB повсеместно, никого такая зависимость особо не напрягает. а вот TextControllers и TextViews уже скорее компоненты, которые вместе реализуют кубик «редактор текста» — используя библиотеки для «длинных строк».

это я к чему: мой StdStdCFrames, например, состоит из двух частей: из библиотеки кишочков (guts), и компонента контролов. объединять их в один модуль я считаю не очень правильным: на самом деле в guts надо вместо этого добавить стандартный механизм фабрик, и оставить библиотекой. как минимум это позволит менять реализацию кишочков при помощи привычных для среды механизмов. (оставим сейчас в стороне то, что CFrames сами по себе хак.)

то есть, мне кажется, что имеет смысл различать компоненты и библиотеки именно по критерию «повторного использования кода». кишочки, например, можно использовать для создания новых контролов, в которых нужны элементы типа редактора строки и др. тот же комбобокс использует редактор, попап-список, и листбокс-like список в различных комбинациях. выделение кишочков в библиотеку позволит проще создавать новые специализированые типы контролов. (опять таки, CFrames тут взяты как удобный пример, а не как руководство к действию.)

фрэймы и порты, кстати, тоже скорее библиотеки, а не компоненты.

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