18 июн. 2009 г.

Игнорирование файлов в Git

Для того, чтобы поставить в игнор некоторые файлы или каталоги необходимо их внести в файл .gitignore

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

git rm --cached


Такая команда удалит файл только из индекса, но оставит его локальную копию.

15 июн. 2009 г.

Fixtutes vs Factories


Иногда конкретная реализация технологии прячет за собой саму суть проблемы которую она решает.






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


Я не буду вдаваться в подробности реализации, недостатки и приимущества YAML Fixtures, FactoryGirl и ObjectDaddy, потому как это лишь реализации решения конкретной проблемы.


Проблема звучит так: Наполнить базу данными.


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


Эсли это тестирование, то по сути нам не очень важна семантика данных. Тоесть вместо Васи Пупкина и Пети Коржика, могут быть использованы User-1, ..., User-N.

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


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


Теперь еще более смелое предположение: фикстуры и фабрики - одно и тоже.


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


Основные притензии:



  • Замедляют выполнение тестов

  • Позволяют вносить противоречивые данные в базу

  • Проблема с поддержкой больших объемов данных

  • Поломка в одном виде фикстур ломает сразу группу тестов



Несомненно это недостатки, но если делать небольшие объемы фикстур и внимательно относиться к данным, то вполне можно успешно ими пользоватся.


Фабрика не панацея, а колько подходящие средство для решения поставленной задачи.


Вот пример когда фикстуры вполне могут сравниться с фабриками и неэффективность фабрик в случае конкретных данных.



<% 10.times do |i| %>
user_<%= i %>
id: <%= i %>
first_name: <%= "First Name User-#{i}" %>
last_name: <%= "Last Name User-#{i}" %>
<% end %>


1 Factory.define :user do |f|
2 f.first_name 'Вася'

3 f.last_name 'Пупкин'
4 end
5
6 Factory(:user, :last_name=>'Коржик', :first_name => 'Петя')

7 Factory(:user, :last_name=>'Карбуратор', :first_name => 'Гриша')

8 Factory(:user, :last_name=>'Нина', :first_name => 'Мишка')


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

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


Выбор есть: