Я не уверен, что означают эти конкретные термины, поэтому я попытаюсь определить, чем они являются, прежде чем я продолжу:
- Повторное использование черного ящика использует класс / функцию / код, не измененный в другом проекте
- Повторное использование белого ящика берет класс / функцию / код из одного проекта и модифицирует его в соответствии с потребностями другого проекта.
Преимущества повторного использования черного ящика в том, что после того, как код написан, отлажен и протестирован, вы можете использовать его бесчисленное количество раз при различных обстоятельствах. Недостатком является то, что действительно многократно используемый код для «черного ящика» встречается редко и может потребовать времени и усилий для форматирования API и кода вызова и приведения его в соответствие с подходом «черного ящика» (без утечки контекста).
Преимущества повторного использования белого ящика в том, что вы действительно можете использовать свой код более одного раза без необходимости сначала извлекать его из исходного проекта. Вы просто копируете и модифицируете, и вы уже в пути. Этот тип повторного использования встречается гораздо чаще, но у него также есть несколько недостатков. В основном, если вы обнаружите ошибку в одной реализации, вам нужно проверить, чтобы убедиться, что она исправлена во всех других реализациях. Это может быть трудно, если они расходятся широко, как это часто бывает.