Мне нравится идея использовать Базу данных В оперативной памяти, такую как SQLite при тестировании вместо того, чтобы создать Насмешки для моих Репозиториев. Таким образом, я могу также протестировать код своих Репозиториев без любых проблем производительности.
Каковы за и против этой стратегии?
Переход от «0,1,2» к ['0', '1', '2'] его только «0,1,2». split (, «»)
Таким образом, если у вас есть переменная users
, то users.split (, «»)
даст вам список.
Если они нужны в виде ints вместо последовательностей, это будет [int (x) для x в users.split (',')]
.
Чтобы преобразовать последовательность в список, используйте разделить
.
Чтобы преобразовать список последовательностей в список целых чисел, используйте понимание списка с помощью int
.
Таким образом, сложив все вместе, это выглядит примерно так:
s = '0,1,2'
l = [int(x) for x in s.split(',')]
Результаты:
[1, 2, 3]
-121--3433070- Я бы сказал, что эти две стратегии - две разные вещи. Как вы сами сказали, с помощью базы данных в памяти вы также можете протестировать свои репозитории, однако сначала необходимо протестировать репозитории, чтобы добиться разделения проблем. Когда вы проектируете свою систему, возможно, в соответствии с MVC, вам нужны ваши контроллеры перед моделями/репозиториями, потому что, во-первых, вы должны решить, что вы хотите сделать, и после этого решить, какие объекты будут совместно достигать этой цели. Возможно, создание контроллеров и издевательство над репозиториями - это лучший способ, после чего можно протестировать репозитории с помощью базы данных в памяти, если ее очень легко настроить.
Так что вы хотите переключиться с чего-то вроде:
0 1 2 3
4 5 6 7
8 9 10 11
на
0 3 6 9
1 4 7 10
2 5 8 11
?
Попробуйте
for (int i = 0; i < width; ++i)
for (int j = 0; j < height; ++j)
array_b[ i * height + j ] = array_a[ j * width + i ];
-121--3554044- Помимо ответа Митча есть еще один аспект: Webapps, как правило, плохо подходят для реляционных баз данных. Реляционные базы данных делают упор на нормализацию - по сути, облегчая записи, но читает тяжелее (с точки зрения проделанной работы, не обязательно для вас). Это очень хорошо работает для ситуаций типа OLAP, ad-hoc query, но не так хорошо для webapps, которые обычно массово взвешиваются в пользу чтения над записью.
Стратегия, используемая нереляционными базами данных, такими как Bigtable, является обратной: денормализовать, чтобы сделать чтение намного проще, за счет сделать запись более дорогой.
-121--1930398-Моя стратегия состоит в том, чтобы при тестировании своего бизнес-кода я макетировал свой репозиторий. При тестировании репозитория выполняется макет уровня доступа к данным. Я использую, насколько это возможно, автоматически сгенерированный код для моего уровня доступа к данным (LINQ-to-SQL), поэтому там мало что можно проверить. То, что есть (валидация, специализированная обработка свойств), обычно может быть протестировано напрямую, без насмешек. Если это абсолютно необходимо (или проще), я иногда подделываю слой данных с помощью пользовательского хранилища в памяти, построенного на списках - см. мой блог по адресу http://farm-fresh-code.blogspot.com , где я написал об этом.
Скорость. Если поле устанавливается или считывается миллиарды раз в ходе моделирования, то необходимо использовать поле, а не свойство, чтобы избежать служебного вызова подпрограммы. По мере возможности, в соответствии с OO (DDD?), в этих случаях я бы рекомендовал прибегать к полям только в классе, посвященном представлению какой-то «ценности», как человек. Логика должна быть сведена к минимуму. Скорее, иметь персонального или персонсерватора.
Но если у вас есть эти проблемы, то вы, вероятно, не программируете c++ и не c #, не так ли?
-121--1255489- Используйте команду svn switch
с параметром командной строки --relocate
.
Если я использую ORM, я обычно использую sqlite в базе данных памяти для тестирования своих приложений, так как у меня нет накладных расходов на настройку макетов и ожидаемых результатов. Есть ускорение над использованием фиктивной базы данных, но я не ожидаю, что это будет быстрее, чем использование макета. Если бы я использовал адаптер SQL, я бы, вероятно, использовал макет, поскольку в противном случае мне, вероятно, пришлось бы переписать вызовы.