小编Ezi*_*nze的帖子

为什么向 Dapper 添加“字段更改跟踪”是好主意还是坏主意?

我们在我们的应用程序中使用DapperDapper.Contrib。我们选择Dapper它是因为它更快,而且由于负载较重,速度对我们来说就是一切。现在看来“更改字段跟踪”对我们来说至关重要。现在Dapper.Contrib创建update始终设置所有字段的查询,这样的查询会使它们变慢。一些表现在有大约 30 列,并且完全更新该表中的行效率非常低。

据我所知,Dapper.ContribChange tracking per object,但Change tracking per field没有被引入图书馆。

我非常仔细地进行了研究,发现该领域还没有开展任何工作。那个不幸的研究让我感到困惑。我想听听您的想法:

  1. 如果这样的扩展没有实现,那么它可能没有用吗?我在这里缺少什么?
  2. 请设身处地为我着想。你会怎么办?迁移到 EF 或向 Dapper.Contrib 引入“Chnage 跟踪”?
  3. 可能添加这样的功能会使 Dapper 变慢,这就是为什么该功能尚未实现?

.net c# entity-framework dapper .net-core

7
推荐指数
1
解决办法
3366
查看次数

单元测试类的最佳实践,主要负责调用依赖项的方法,但也包含逻辑

假设我有StartCommandHandler责任创建一些包含所需文件的文件。但为了做到这一点,我必须赋予他一系列子职责,例如:

  • 检查FTP中是否存在文件
  • 如果不从多个源下载文件到临时文件夹
  • 然后执行文件夹中的一些脚本
  • 然后在脚本执行后读取生成的文件
  • 然后从该文件夹创建 zip
  • 然后删除该文件夹
  • 然后更新数据库

由于该命令处理程序,我们正在创建包含所有必需文件的文件夹。现在该文件夹已准备好进行其他操作。

我刚刚读过"Art of the Unit testing"。并开始添加单元测试。SOLID我也遵循原则。特别是SRPDIP,我认为这是单元测试的先决条件。所以,我上面所说的大部分事情都是通过特定的接口完成的。因此,该命令处理程序 90% 的工作是调用依赖项的方法。10%是这样的逻辑:

if(!_dependency1.IsAnySomething())
{
     _dependency2.Download();

      var isScriptNeeded = _dependency2.IsScriptNeeded();

      if(isScriptNeeded)
      {
          var res = _dependency3.ExecuteScript();
         _dependency4.SetScriptResult(res.Info, res.Date, res.State);
      }

     _dependency3.Archive();

     _dependency5.DeleteTemp();
}
Run Code Online (Sandbox Code Playgroud)

我已经测试了该命令处理程序的所有依赖项。但是,帽子命令处理程序还包括一些小逻辑,例如是否需要下载文件,或者是否删除临时文件等等......

我脑子里有很多问题,比如:

  1. 单元测试对于这样的单元可能没有意义吗?集成测试可以拯救?因为,测试是否检查所有调用似乎是错误的,例如DeleteTemp下载后是否调用,或者脚本是否执行,或者脚本结果以正确的方式传递给方法SetScriptResult。这是好的单元测试吗?
  2. 有什么方法可以重构该类以使其可测试吗?

c# java testing integration-testing unit-testing

5
推荐指数
1
解决办法
1394
查看次数

在.NET Core中避免n层体系结构中的循环依赖性

我已经在.net core(控制台应用程序)中创建了这样的n层体系结构:

Company.App
   -> reference to Company.Services
   -> reference to Company.Infrastructure

Company.Services
   -> reference to Company.Infrastructure

   + IWorkStarter
   + WorkStarter - (ExternalClient is injected)

Company.Infrastructure
   + RabbitMqConsumer - (IWorkStarter must be injected) - Cyclic dependency
   + IExternalClient
Run Code Online (Sandbox Code Playgroud)

如您所见,Services已经有对的引用Infrastructure。而且我也必须IWorkStarter在兔子用户内部使用。似乎我没有必要的知识来以正确的方式分离这些组件。请你帮助我好吗?该项目非常简单。

c# architecture dependency-injection n-tier-architecture .net-core

1
推荐指数
1
解决办法
62
查看次数

Foreach等待任务完成

我有这样的情绪:

        foreach (var item in listBoxFileNames.SelectedItems)
        {
            MessageBox.Show("I am not waiting");
            CancellationTokenSource tokenSourcve = new CancellationTokenSource();
            CancellationToken token = tokenSourcve.Token;

            Task task1 = new Task(() =>
                {
                    ProcessDatas(); // method
                }
                , token);

            task1.Start();
        }
Run Code Online (Sandbox Code Playgroud)

我想让foreach等待任务的完成.不要等待.它会在每个messagBox之后立即显示MessageBox.

c# foreach task-parallel-library

0
推荐指数
1
解决办法
5032
查看次数