代码之家  ›  专栏  ›  技术社区  ›  mxmissile

是否使用TDD注入构造函数?

  •  3
  • mxmissile  · 技术社区  · 16 年前

    1. 1. 方法是唯一会使用它的方法,如果我必须添加使用此查询对象的第二个方法,则每次使用后都必须重新实例化或重置该对象。
    2. 将查询对象添加到方法的签名中。

    还有其他的选择或模式吗?还是我走错路了?

    下面是一些伪代码:

    选项1

    public class OrdersController
    {
                public OrdersController(IOrderQuery query)
                {
                    this.query = query;
                }
    
                private readonly IOrderQuery query;
    
                public Queryable<Order> OrdersWaiting()
                {
                    var results = query(...);
                    ...
                }
    }
    

    选项2

    public class OrdersController
    {
                public Queryable<Order> OrdersWaiting(IOrderQuery query)
                {
                    var results = query(...);
                    ...
                }
    }
    

    和我的查询对象

    public class OrderQuery : IOrderQuery
    {
                public OrderQuery(IUnitOfWork unitOfWork)
                {
                    ...
                }
    }
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   Jeff Sternal    16 年前

    如果我真的需要再加上一个 使用此查询对象的方法, 对象必须是 使用。

    如果这是阻止您使用构造函数注入的方法,请考虑注入 IOrderQueryFactory

        2
  •  1
  •   rusty    16 年前

    显然更喜欢选项1而不是选项2。似乎IOC容器有责任实例化/了解查询对象。打电话的人不必知道如何/在哪里打电话的细节 OrdersWaiting 获取其数据。

    使用选项2,调用方不仅需要获取控制器的实例,还需要获取查询对象的实例,这可能会超出调用方的可见性。

    推荐文章