Сложный вопрос:
Некоторые части кода могут быть обобщены как библиотеки или API. У нас есть общая библиотека, которая держится в курсе решений типичных проблем. Обычно: проверка, кэширование, классы доступа к данным, вход, и т.д...
Некоторые части специализированы. Они не могут быть обобщены легко. Мы преобразовываем их в HowTos и даем внутренние презентации. Код также переработан при помощи легко доступного для просмотра SCM (в нашем случае SVN).
У нас также есть инструменты, которые генерируют код, что одна одна рука не может быть переработана, на другом это всегда подобно (думайте, называя хранимую процедуру).
Парное программирование является также полезным способом распространить знание существующих решений. Мы используем это когда возможный или соответствующий.
Последняя техника является обучением. У каждого кодера есть обучающая программа для обращения к. Так как обучающие программы - немногие, существует большое совместное использование между ними, и это знание может быть рассеяно в вершине вниз способ.
Осуществите рефакторинг беспощадно и надежда на лучшее.
Обновление (4 года спустя и надо надеяться более мудрый)
Имейте платформу, которая активно поддерживается.
Знайте, что существующая кодовая база / заставляет других разработчиков знать кодовую базу. Если Ваша группа/компания является достаточно многочисленной, имейте кого-то, кто знает кодовую базу и может попроситься руководства.
Документ, документ, документ. Недокументированный код бесполезен для повторного использования, потому что это берет слишком долго для понимания его внутренних работ.
Имейте хорошие интерфейсы. Легкие типы, легкие структуры или классы. Чем более сложно что-то, тем меньше это будет использоваться в другом проекте.
Оптимизируйте и отладьте повторно используемый код. Разработчики, которые испытывают ошибки в чужом коде в течение энного времени, начнут уже кодировать существующий код снова.
Попытайтесь использовать TDD, если Ваш не, уже мой начальный ответ.
Я думаю, что использование TDD является отличным способом поддержать связь кода на низком уровне среди других преимуществ. В то время как это по сути не препятствует тому же поведению быть реализованным дважды, оно делает это намного легче при идентификации области, в которой Вы могли удалить дублирование.
Другое преимущество, TDD имеет шаг для удаления dupication (осуществляющий рефакторинг) как часть цикла.
Кроме того, тесты являются частью Вашей документации кодов, таким образом помогая определить дублированное поведение.
Организация является ключевой. Если пространства имен и intellisense доступны, правильная функция может быть сужена на и в конечном счете найдена. Если они не находят то, что они хотят точно, они могут найти, что что-то закрывается или связанный. Код, из которого просто делают пюре вместе в одной огромной группе, помогает найти, но люди никогда не собираются находить метод, который они хотят достаточно быстро.
Непротиворечивость также очень важна, и с именованием и с местоположением. Если Вы решаете изменить свой стиль в какой-то момент во время проекта, возвратитесь и измените все для установки тому стилю. Это может легко быть очень длинный и скучный процесс, но это лучше, чем попытка должным быть пользоваться непоследовательной библиотекой.