gpt4 book ai didi

TDD 友好类单例类

转载 作者:行者123 更新时间:2023-12-04 08:15:09 25 4
gpt4 key购买 nike

我有至少 2 个其他类使用的存储库类。这个存储库类需要初始化——成本很高(查询数据库)。现在,我在需要的地方创建单独的存储库实例。问题是,每次我创建存储库时都必须对其进行初始化。如何设计这样的存储库以使其对 TDD 友好?我首先想到的是 Singleton,但它是 not the solution .

最佳答案

我希望 TDD 友好是指“可测试”代码。对于 Singleton ObjectX,我认为最常见的方法是将“控制创建”的责任拆分 (SRP) 给另一个类,以便 ObjectX 完成它应该做的所有事情。

然后你有另一个类 ObjectXFactory 或 Host 或任何你想称呼的类,负责为所有客户端提供单个实例(并在需要时提供线程同步等)

  • 对象 X 可以独立进行 TDD。您可以在测试用例中创建一个新实例并测试功能。
  • 另一方面,ObjectXFactory 也很容易测试。您只需要查看多个 GetInstance() 调用是否返回同一个对象。或者更好地将此责任委托(delegate)给像 Spring 这样的 IOC 框架,它允许您以声明方式标记对象定义以获得单例行为(也为您节省了编写测试的工作量)

您只需要教育并遵守不调用 ObjectX 构造函数的团队约定 - 始终使用 ObjectXFactory.CreateInstance()。 (如果你发现你有一个意识/纪律问题,通过偷偷摸摸的 InternalsVisibleToAttribute 将 ObjectX 的 ctor 标记为内部并且只对测试程序集可见)

关于TDD 友好类单例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/780483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com