Как программисты практикуют повторное использование кода

Я был плохим программистом, потому что делаю копию и вставлю. Например, каждый раз, когда я подключаюсь к базе данных и извлекаю набор записей, я копирую предыдущий код и редактирую, копирую код, который устанавливает datagridview и редактирует. Мне известно о повторном использовании кода фразы, но я на самом деле не использовал его. Как я могу использовать повторное использование кода, так что мне не нужно копировать и вставлять код базы данных и код datagridview.,

Ответы

Ответ 1

В зависимости от размера проекта можно изменить ответ.

Для проекта less я бы рекомендовал настроить класс DatabaseHelper, который будет выполнять весь ваш доступ к базе данных. Это будет просто обертка вокруг соединений открытия/закрытия и выполнения кода БД. Затем на более высоком уровне вы можете просто записать DBC-команды, которые будут выполнены.

Аналогичный метод может быть использован для более крупного проекта, но потребуется дополнительная работа, необходимо добавить интерфейсы, DI, а также абстрагироваться от того, что вам нужно знать о базе данных.

Вы также можете попробовать посмотреть ORM, DAAB или на Группа шаблонов и практик

Что касается того, как предотвратить оле C & P? - Ну, когда вы пишете свой код, вам нужно периодически его просматривать, если у вас есть аналогичные блоки кода, которые могут варьироваться только по параметру или двум, что всегда является хорошим кандидатом для рефакторинга в свой собственный метод.

Теперь для моего примера псевдокода:

Function GetCustomer(ID) as Customer
   Dim CMD as New DBCmd("SQL or Stored Proc")
   CMD.Paramaters.Add("CustID",DBType,Length).Value = ID
   Dim DHelper as New DatabaseHelper
   DR = DHelper.GetReader(CMD)
   Dim RtnCust as New Customer(Dx)
   Return RtnCust
End Function

Class DataHelper
  Public Function GetDataTable(cmd) as DataTable
    Write the DB access code stuff here.
    GetConnectionString
    OpenConnection
    Do DB Operation
    Close Connection
  End Function
  Public Function GetDataReader(cmd) as DataReader
  Public Function GetDataSet(cmd) as DataSet
  ... And So on ...
End Class

Ответ 2

Сущность повторного использования кода заключается в том, чтобы выполнить общую операцию и параметризовать ее, чтобы она могла принимать различные входы.

Возьмите скромный printf, например. Представьте себе, что у вас не было printf, и только write, или что-то подобное:

//convert theInt to a string and write it out.
char c[24];
itoa(theInt, c, 10);
puts(c);

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

printf("%d", theInt);

Вам не нужно быть таким же фантастическим, как printf с его переменными аргументами и строкой формата. Даже простая процедура, например:

void print_int(int theInt)
{
    char c[24];
    itoa(theInt, c, 10);
    puts(c);
}

сделал бы трюк некрасиво. Таким образом, если вы хотите изменить print_int, чтобы всегда печатать на stderr, вы можете его обновить:

void print_int(int theInt)
{
    fprintf(stderr, "%d", theInt);
}

и все ваши целые числа теперь будут магически напечатаны до стандартной ошибки.

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

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

Библиотеки не волшебным образом появляются. Они созданы программистами, чтобы облегчить их жизнь и позволить им работать быстрее.

Ответ 3

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

Ответ 4

Отъезд Martin Fowler book на refactoring или некоторые из многочисленных интернет-ресурсов, связанных с рефакторингом (также в stackoverflow), чтобы узнать, как вы можете улучшить код, который имеет запахи дублирования.

Ответ 5

Сначала создайте библиотеку с многократно используемыми функциями. Они могут быть связаны с различными приложениями. Это экономит много времени и поощряет повторное использование.

Также убедитесь, что библиотека протестирована и задокументирована. Поэтому очень легко найти правильный класс/функцию/переменную/константу.

Ответ 6

Хорошее эмпирическое правило состоит в том, что вы используете один и тот же кусок три раза, и, очевидно, его можно обобщить, чем сделать его процедурой/функцией/библиотекой.

Однако, по мере того, как я становлюсь старше, а также более опытен как профессиональный разработчик, я более склонен рассматривать повторное использование кода как не всегда лучшую идею по двум причинам:

  • Трудно предвидеть будущие потребности, поэтому очень сложно определить API, чтобы вы действительно использовали их в следующий раз. Это может стоить вам в два раза больше времени - как только вы сделаете его более общим, чтобы второй раз вы его переписывали. Мне кажется, что в особенности проекты Java в последнее время склонны к этому, они, кажется, всегда переписываются в рамках du jour, просто для того, чтобы быть более "легче интегрироваться" или что-то в будущем.

  • В более крупной организации (я один из ее членов), если вам приходится полагаться на какую-то внешнюю команду (как внутри, так и на третьей стороне), у вас может быть проблема. Ваше будущее зависит от их финансирования и их ресурсов. Таким образом, это может быть большой нагрузкой для использования внешнего кода или библиотеки. Аналогичным образом, если вы передадите часть кода какой-либо другой команде, они могут ожидать, что вы ее сохраните.

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

Ответ 7

чтобы получить повторное использование кода, вам нужно стать мастером...

  • Предоставление имен вещей, которые захватывают их сущность. Это действительно важно.
  • Убедиться, что это только одно. Это действительно возвращается к первому пункту, если вы не можете назвать его по своей сути, то часто его слишком много делают.
  • Локализация вещи где-то логична. Опять же, это возвращается к тому, чтобы хорошо называть вещи и захватывать их суть...
  • Группировка с вещами, основанными на центральной концепции. То же, что и выше, но указано иначе: -)

Ответ 8

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

ExportToExcel (дата списка, имя файла строки)

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

Ответ 9

Первое, что нужно отметить, это то, что с помощью copy-and-paste вы повторно используете код, хотя и не самым эффективным способом. Вы узнали о ситуации, когда вы уже нашли решение.

Есть две основные области, о которых вам нужно знать, когда думаешь о повторном использовании кода. Во-первых, повторное использование кода в рамках проекта и, во-вторых, повторное использование кода между проектами.

Тот факт, что у вас есть фрагмент кода, который вы можете копировать и вставлять в проект, должен быть признаком того, что фрагмент кода, который вы смотрите, полезен в другом месте. Это время, чтобы превратить его в функцию и сделать ее доступной в рамках проекта. В идеале вы должны заменить все записи этого кода своей новой функцией, чтобы (a) уменьшал избыточный код и (b) гарантировал, что любые ошибки в этом фрагменте кода должны быть исправлены только в одной функции, а не во многих.

Вторая область, повторное использование кода в проектах, требует еще одной организации, чтобы получить максимальную выгоду. Эта проблема была рассмотрена в нескольких других вопросах SO, например. здесь и здесь.

Хорошим началом является организация кода, который, вероятно, будет повторно использоваться в проектах в исходных файлах, которые максимально автономны. Минимизируйте объем поддержки, специфичный для проекта, код, который требуется, поскольку это упростит повторное использование целых файлов в новом проекте. Это означает минимизацию использования конкретных типов данных проекта, минимизацию глобальных переменных проекта, связанных с проектом, и т.д.

Это может означать создание файлов служебных программ, которые содержат функции, которые, как вы знаете, будут полезны в вашей среде. например. Общие функции базы данных, если вы часто разрабатываете проекты, зависящие от баз данных.

Ответ 10

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

Ответ 11

Это зависит от того, какой язык программирования вы используете. На большинстве языков вы можете

  • Напишите функцию, параметризуйте ее, чтобы разрешить варианты
  • Напишите объект функции, члены которого хранят переменные данные
  • Разработайте иерархию классов (функциональных объектов?), которые реализуют еще более сложные варианты.
  • В С++ вы также можете создавать шаблоны для генерации различных функций или классов во время компиляции

Ответ 12

Попробуйте привыкнуть к функциям и библиотекам других людей.

Обычно вы обнаружите, что ваша конкретная проблема имеет хорошо проверенное, элегантное решение.

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

Ответ 13

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

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

Важно оценить все, что вы делаете, с точки зрения того, может ли он быть доступен другим для повторного использования. Это должен быть фундаментальный подход к программированию, который большинство из нас не понимает.

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

Ответ 14

Легко: всякий раз, когда вы ловите код для копирования кода, немедленно выньте его (т.е. не делайте это после того, как вы уже несколько раз указали код CP) в новую функцию.