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

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

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

Пример использования



Система управления библиотекой требует, чтобы книги добавлялись администраторами или авторами. У нас есть особенность, как же ее правильно построить?

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

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

Чтобы заполнить таблицу книг, в типичном запросе SQL столбец для authorId ожидает число, которое, как указано выше, ссылается на автора в таблице авторов, но всякий раз, когда пользователь добавляет книгу, мы не ожидаем, что они введут идентификатор автора, потому что, во-первых, они не будут знать, какой authorId у наших авторов ', во-вторых, такой подход не будет удобным для пользователя, требует слишком много накладных расходов, в-третьих, что, если автор еще не существует в нашей базе данных? Это вызовет неприятную ошибку SQL и может привести к поломке нашего приложения. Учитывая все эти ограничения, нам пришлось бы создать удобную для пользователя функцию, которая была бы высокопроизводительной.

Чтобы сделать это удобным для пользователя (что должно быть первым соображением при создании приложения), нам нужно, чтобы пользователь ввел имя автора, например, «JK Rowling». Когда мы получаем имя автора, чтобы успешно вернуть идентификатор автора и сослаться на него в нашей таблице книг, нам нужно будет проверить таблицу авторов, чтобы узнать, существует ли этот автор уже, и если он существует, вернуть этот идентификатор и добавьте его в столбец authorId в таблице книг. Если он не существует, создайте нового автора с этим именем и затем верните этот идентификатор в столбец authorId. Вот как будет выглядеть этот метод

В строке 20 приведенного выше фрагмента кода все, что мы делаем, - это выбираем из таблицы авторов, где имя совпадает с именем автора, введенным пользователем. Если вы внимательно посмотрите на запрос, вы заметите, что функция SQL вызывается для преобразования имени в нижний регистр. Вводимые пользователем данные также преобразуются в нижний регистр. Это необходимо для обеспечения «нормальности» метода, чтобы значения сравнивались одинаково, так как это повысило бы шансы на обнаружение совпадения. Если этот запрос возвращает результат, это означает, что автор существует, и мы возвращаем эти данные. В противном случае в строке 28 мы создаем нового автора с именем, введенным пользователем, а затем возвращаем результат этих данных, чтобы мы могли получить идентификатор нового созданного автора.

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

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

Заключение

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