В UoW и репозиторий часто прячут логику проверки или дополнения данных, инвалидации кеша или часто используемые запросы. Бизнес логика при этом становится проще. Как вы и сами написали, для тестирования всей логики целиком, есть интеграционные тесты.
Для простых проектов может и не нужно. Но с определённого момента написание юнит тестов под логику завязанную на EF может обернутся сущим адом. Интерфейсы IRepository<T> и IUnitOfWork изолируют вашу бизнес логику от инфраструктуры.
Вы неправильно используете IServiceScope — вы его уничтожаете сразу после создания, не дождавшись выполнения задачи. А используя ActivatorUtilities из Microsoft.Extensions.DependencyInjection можно избежать регистрации самих задач в контейнере.
Код
public class JobFactory : IJobFactory
{
private readonly IServiceProvider _provider;
public JobFactory(IServiceProvider provider)
{
_provider = provider;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
return new JobWrapper(_provider, bundle.JobDetail.JobType);
}
public void ReturnJob(IJob job)
{
(job as IDisposable)?.Dispose();
}
}
public class JobWrapper : IJob, IDisposable
{
private readonly IServiceScope _serviceScope;
private readonly IJob _job;
public JobWrapper(IServiceProvider serviceProvider, Type jobType)
{
_serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope();
_job = ActivatorUtilities.CreateInstance(_serviceScope.ServiceProvider, jobType) as IJob;
}
public Task Execute(IJobExecutionContext context)
{
return _job.Execute(context);
}
public void Dispose()
{
_serviceScope.Dispose();
}
}
public class DataJob : IJob
{
private readonly IEmailSender _emailSender;
public DataJob(IEmailSender emailSender)
{
_emailSender = emailSender;
}
public async Task Execute(IJobExecutionContext context)
{
await _emailsender.SendEmailAsync("example@gmail.com", "example", "hello");
}
}
В Fortnite долгое время был просто зверский L2R2 (прицел-выстрел) auto-aim. И все клава-мышеры писали кипятком от постоянных хедшотов. Поэтому конкретно в Fortnite проблема скорее не в прицеливании, а в недостатке кнопок (привет Scuf). А так многие профессионалы играют только на джойстике.
А меня наоборот пугают такие веяния. Сейчас .NET Core кажется более независимым от LTS цикла и развивается настолько быстро насколько вообще может. А так получается что новые фишки будут приходить только раз в год. Я больше за то, чтобы .NET Framework 5 был более стабильным подмножеством .NET Core с LTS.
Базовые образы уже давно поменялись:
для сборки: microsoft/dotnet:2.2-sdk
для публикации: microsoft/dotnet:2.2-aspnetcore-runtime
и минимальные образы: microsoft/dotnet:2.2-aspnetcore-runtime-alpine
И уже в альфе 3.0 версия которая будет запускаться исключительно на netcoreapp 3.0.
Материал изложен прекрасно. Но к сожалению (а может и к счастью) обходит стороной реальный процесс настройки кластера (kubeadm, kops, terraform) и принцип работы его основных компонентов (kubelet, kube-proxy, kube-apiserver, kube-scheduler, kube-controller-manage и прочие).
Для работы я бы рекомендовал покупать мониторы с USB Type-C входом, например: Samsung S27H850QFN. У LG есть получше. Монитор + зарядка (Power Delivery) + USB-хаб и всего один провод на столе.
В UoW и репозиторий часто прячут логику проверки или дополнения данных, инвалидации кеша или часто используемые запросы. Бизнес логика при этом становится проще. Как вы и сами написали, для тестирования всей логики целиком, есть интеграционные тесты.
Рекомендую добавить ещё абстракцию на транзакции
ITransaction
, Тогда вы сможете использовать несколько Unit of Work в одной логике:Не идеально, но в большинстве случаев достаточно.
Для простых проектов может и не нужно. Но с определённого момента написание юнит тестов под логику завязанную на EF может обернутся сущим адом. Интерфейсы
IRepository<T>
иIUnitOfWork
изолируют вашу бизнес логику от инфраструктуры.или диванных оставить в своей песочнице, а клава-мышей кидать к пк-шникам
В Fortnite долгое время был просто зверский L2R2 (прицел-выстрел) auto-aim. И все клава-мышеры писали кипятком от постоянных хедшотов. Поэтому конкретно в Fortnite проблема скорее не в прицеливании, а в недостатке кнопок (привет Scuf). А так многие профессионалы играют только на джойстике.
Отличная статья, спасибо. Ещё хотелось бы узнать про dynamic volume provisioning на bare-metal.
для сборки: microsoft/dotnet:2.2-sdk
для публикации: microsoft/dotnet:2.2-aspnetcore-runtime
и минимальные образы: microsoft/dotnet:2.2-aspnetcore-runtime-alpine
И уже в альфе 3.0 версия которая будет запускаться исключительно на netcoreapp 3.0.
Материал изложен прекрасно. Но к сожалению (а может и к счастью) обходит стороной реальный процесс настройки кластера (kubeadm, kops, terraform) и принцип работы его основных компонентов (kubelet, kube-proxy, kube-apiserver, kube-scheduler, kube-controller-manage и прочие).
Для работы я бы рекомендовал покупать мониторы с USB Type-C входом, например: Samsung S27H850QFN. У LG есть получше. Монитор + зарядка (Power Delivery) + USB-хаб и всего один провод на столе.
Тренд Ютуба. Бессмысленный и беспощадный. Но функционал полезный.
Это по сравнению с чем? HLS? Какова вообще реальная задержка real-time видео?
Есть ли вообще смартфоны без фронталки с большим дисплеем (свыше 90% площади) и с нормальными характеристиками?