Первые 20 часов. Как быстро научиться… чему угодно
Шрифт:
Файлы Readme очень важны, поскольку многие программы требуют пояснений. Без этого документа зачастую бывает трудно понять, как пользоваться программой. Самостоятельный просмотр кода не так эффективен, как чтение подробного объяснения, написанного создателем программы.
Том утверждает, что сначала нужно написать файл Readme, а уж затем браться за саму программу. Большинство программистов поступают с точностью до наоборот: сначала пишут программу, а затем (возможно) ознакомительный файл. И упускают благоприятную возможность: разработка документации помогает понять,
Такой подход мне нравится. Один из приемов, которые я освоил в процессе работы над «Сам себе MBA», заключался в написании рекламных материалов до, а не после создания коммерческого предложения. Выясняя, что требуется потенциальным покупателям, и включая это в рекламный материал, вы получаете более полное представление о том, каким должен быть продукт, чтобы привлечь внимание клиентов. Разработку самого предложения определяет маркетинговое исследование.
Я взял блокнот и составил список функций, которые я хотел бы иметь в своем приложении, а также характеристик программы.
Программа представляет собой простое приложение, предназначенное для создания заметок.
Приложение предназначено для одного пользователя.
Приложение использует среду Sinatra и базу данных для создания, сохранения, обновления и удаления записей на странице.
Приложение позволяет пользователю создавать страницы со сложным форматированием, таким как жирный шрифт, курсив, подчеркивание и тому подобное.
Приложение требует пароль доступа и обеспечивает сохранность базы данных, насколько это возможно.
У приложения привлекательный внешний вид.
Приложение может без труда размещаться на Heroku или любом другом ресурсе.
Я собираюсь назвать это приложение «Codex» — в старину так называли книги, — поскольку приложение будет применяться в основном для хранения справочной информации, списков и тому подобное.
В интернет-программировании подобные приложения называются «CRUD» — аббревиатура от английского «создание чтение обновление удаление». Стоит отметить, что эти функции совпадают с командами GET, POST, PUT, DELETE, и поэтому написать такое приложение можно и с использованием маршрутов Sinatra. Разница, причем существенная, заключается в использовании базы данных.
Какие возможности работы с базами данных предоставляет Heroku? Не знаю. Придется вновь заглянуть в документацию.
По умолчанию Heroku использует базу данных под названием Postgres [35]. Каждому новому приложению автоматически назначается маленькая база данных разработки. Мне это подходит, но как ею пользоваться и какими средствами протестировать программу на моем компьютере?
За ответами на эти вопросы я решил обратиться к Stack Overflow. Общее мнение: решение подобных задач значительно облегчает применение базы данных под названием DataMapper [36].
DataMapper относится к классу программ, получивших название «объектно-реляционного отображения», или сокращенно ORM [37]. Метод ORM решает
Предположим, что мы пишем программу для сайта Amazon.com и хотим вывести на экран список книг Дж. К. Роулинг, автора серии о Гарри Поттере. Команда на языке SQL будет выглядеть так:
SELECT * FROM Book WHERE author = "J.K. Rowling" ORDER BY
title;
Данная команда извлекает из базы данных все записи, в поле «author» которых содержится «J.K. Rowling», и располагает их в алфавитном порядке по названию книги.
К сожалению, заставить SQL или любой другой язык запросов базы данных корректно работать с такими языками, как Ruby, — сложная задача. Непросто писать программу на одном языке, не говоря уже о нескольких языках одновременно.
Здесь на помощь приходит ORM: она позволяют программисту писать программу на одном языке, который ORM затем переводит на язык базы данных. Так гораздо проще.
Таким образом, DataMapper представляет собой библиотеку, облегчающую связь с базами данных, использующих Ruby. По умолчанию DataMapper содержит большое количество удобных функций для создания, чтения, обновления и удаления записей в базе данных. Поскольку программа DataMapper существует уже довольно давно и тщательно протестирована, в большинстве случаев надежнее пользоваться ею, а не пытаться писать собственную программу для базы данных.
DataMapper доступна в виде стандартной библиотеки, которая устанавливается следующим образом:
$ gem install data_mapper
Поскольку объем библиотеки DataMapper очень велик, ее можно устанавливать по частям. Этот принцип называется «модульностью», и он может служить признаком профессионального программирования. Вот как выглядит команда загрузки всех отдельных библиотек:
$ gem install dm-core dm-aggregates dm-constraints dm-migrations dm-transactions dm-serializer dm-timestamps dm-validations dm-types
Вместо установки всей библиотеки вы можете загрузить только те модули, которые будет использовать ваша программа, что гораздо эффективнее.
Использование DataMapper
Теперь, когда библиотека DataMapper установлена, я должен научиться с ее помощью 1) связываться с базой данных и 2) создавать базу данных для хранения и извлечения нужной мне информации.
В документации на Heroku указано, что следующая команда позволит приложению Sinatra связываться с базой данных:
DataMapper.setup (: default, ENV ['DATABASE_URL'] ||
"sqlite3://# {Dir.pwd} /database.db")
В данном случае || означает «или». ENV ['DATABASE_URL'] — это переменная, которую Heroku использует для вашей базы данных. Если эта база данных недоступна, то будет применен второй вариант, база данных под названием Sqlite [39].