Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Au, Вы писали:
Au>>Этот код покрыт юнит тестами?
AVK>Да.
Au>> Можно их посмотреть (без ненужных подробностей разумеется)?
AVK> А зачем?
Ты привел некоторое решение, хочется видеть насколько оно эффективно с точки зрения полного цикла разработки/поддержки (то есть с тестами).
AVK> Там ничего удивительного нет, прогоняются юзкейсы основные. И без подробностей все равно пользы от них не будет.
Ничего удивительного и не нужно, хочется увидеть как тестируется твое решение. Покажи 1 тест, например который проверяет что ассерт SerialNumberAlreadyUsedForUser срабатывает при нужных условиях.
Здравствуйте, Au, Вы писали:
AVK>> А зачем? Au>Ты привел некоторое решение, хочется видеть насколько оно эффективно с точки зрения полного цикла разработки/поддержки (то есть с тестами).
Это в принципе невозможно без подробносьей.
AVK>> Там ничего удивительного нет, прогоняются юзкейсы основные. И без подробностей все равно пользы от них не будет. Au>Ничего удивительного и не нужно, хочется увидеть как тестируется твое решение.
Совершенно обычным способом. Берется входной набор данных, покрывающий основные сценарии, успешные и сбойные, и прогоняется по этому коду.
Au> Покажи 1 тест, например который проверяет что ассерт SerialNumberAlreadyUsedForUser срабатывает при нужных условиях.
Берем валидный во всех отношениях серийник, прогоняем. Потом прогоняем еще раз и смотрим код ошибки.
[TestCase("****", 1)]
[TestCase("****", 4)]
public async Task ActivateActivated(string serialNumber, int maxActivations)
{
using (var db = _dbFactory())
using (var tx = db.BeginTransaction())
{
for (var i = 0; i < maxActivations; i++)
await DoActivation(db, serialNumber);
var ex = Assert.ThrowsAsync<HttpServiceException>(async () => await DoActivation(db, serialNumber));
Assert.AreEqual(HttpStatusCode.BadRequest, ex.StatusCode);
Assert.AreEqual("SerialNumberAlreadyUsed", ex.ErrorCode);
tx.Rollback();
}
}
Какие тут еще могут быть варианты?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, Au, Вы писали:
Au>А зачем нужна транзакция для юнит теста? Или используется реальная тестовая БД?
Используется реальная тестовая БД. Транзакция ее гарантированно подчищает при любом сбое. Но есть и другие варианты. Здесь такой выбран, потому что серийники генерируются и проверяются сторонней системой, и лень было докручивать клиента для этого.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
[Skip]
Au>А зачем нужна транзакция для юнит теста? Или используется реальная тестовая БД?
Я, например, как правило для CI имею бакап эталонной базы, она подымается и тесты проганяются на этой базе. Это автоматически спасает от кучи сторонних эффектов (тригера, индексы, констрейнты, типы данных).
Да тесты работают медленней, зато в продакшине я спокоен.
Здравствуйте, AndrewVK, Вы писали:
AVK>А новая гвардия что делает? Пишет мегарешение, которое кушает 5 килобаксов в месяц за облако, выполняя при этом малую долю работы похожей системы, тратящей 1.5К в месяц? При том что и у второй системы не все идеально и с перфомансом, и с лишним бойлерплейтом. AVK>Если что — это как раз реальный пример применения модных технологий и CQRS.
Тут вопрос спорный. Разница в затратах на облако, насколько я понял, где-то $3500. Это меньше нижней з/п одного программиста в США и где-то 1.5 з/п хороших программистов в МСК. С точки хрения бизнеса возникает резонный вопрос: Сколько нужно программистов и какой квалификации (и, соответственно, с какой з/п) чтобы поддерживать и развивать оба этих проекта?
P.S. Я не оправдываю Repository, т.к. пытался использовать его в реальных проектах и быстро пришел к тем же заключениям, которые были описаны выше (короче отказался). Я говорю, что указывать просто затраты на облако с точки зрения бизнеса некорректно.
Здравствуйте, AngeL B., Вы писали:
AB>Тут вопрос спорный.
Зато результаты совершенно бесспорные.
AB> Разница в затратах на облако, насколько я понял, где-то $3500. Это меньше нижней з/п одного программиста в США и где-то 1.5 з/п хороших программистов в МСК. С точки хрения бизнеса возникает резонный вопрос: Сколько нужно программистов и какой квалификации (и, соответственно, с какой з/п) чтобы поддерживать и развивать оба этих проекта?
О, а тут все еще смешнее. Первый проект большую часть его истории разрабатывал один человек. А второй — целая немаленькая команда. И закончилась его печальная судьба в том числе потому что новые люди очень много времени тратили на въезжание.
AB>P.S. Я не оправдываю Repository
Дело не в Repository, дело в основном в CQRS. И в том что смелые парни решили зачем то написать асинхронный велосипед с распределенными данными, при этом явно не имея в таком даже базового опыта.
AB>, т.к. пытался использовать его в реальных проектах и быстро пришел к тем же заключениям, которые были описаны выше (короче отказался). Я говорю, что указывать просто затраты на облако с точки зрения бизнеса некорректно.
Сколько оговорок. Но видишь ли какое дело — когда стадо виртуалок само себя нагружает работой и имитирует бурную деятельность, при этом чтобы понять что там вообще происходит понадобились очень хорошие спецы и много времени — тут все отсылки на зарплаты программистов не канают.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AngeL B., Вы писали:
AB>P.S. Я не оправдываю Repository, т.к. пытался использовать его в реальных проектах и быстро пришел к тем же заключениям, которые были описаны выше (короче отказался). Я говорю, что указывать просто затраты на облако с точки зрения бизнеса некорректно.
Лично мне проще пользоваться запросами, чем вот этой необыкновенной ерундой с ORM и развесистой иерархией репозов, которые сами не делают ничего. Вообще, обилие разного рода SQL-бабок, т.е. женщин средних лет, которые занимаются только БД и которым платят не столь много, как бы говорит нам, что уметь пользоваться запросами — это несложно.
Здравствуйте, Слава, Вы писали:
С>Здравствуйте, AngeL B., Вы писали:
AB>>P.S. Я не оправдываю Repository, т.к. пытался использовать его в реальных проектах и быстро пришел к тем же заключениям, которые были описаны выше (короче отказался). Я говорю, что указывать просто затраты на облако с точки зрения бизнеса некорректно.
С>Лично мне проще пользоваться запросами, чем вот этой необыкновенной ерундой с ORM и развесистой иерархией репозов, которые сами не делают ничего. Вообще, обилие разного рода SQL-бабок, т.е. женщин средних лет, которые занимаются только БД и которым платят не столь много, как бы говорит нам, что уметь пользоваться запросами — это несложно.
Query Decomposition — вот что голые запросы тебе дать не могут. Получится самопальная склейка строк.