我们刚刚开始齐心协力在我们的项目中统一使用依赖注入,我遇到了一个问题。
我正在编写一个类来处理我们的 MongoDB 查询。我将 MongoClient 作为对构造函数的依赖项传入,没有问题。但是,当实例化对象所需的变量在实例化时不可用时,我该如何处理依赖关系?
特别是,我们有一个 MongoCollection 方法的包装器 findOne,如果您传入一个字符串,当前(在旧代码中)将该字符串转换为带有“new MongoId($_id)”的 MongoId,并将其用于查找功能。
根据我对依赖注入的了解,拥有“new MongoId”是个坏主意,而且我已经知道,为将字符串转换为 MongoId 的函数编写测试用例会变得更加困难。
但是,当 MongoId 类在构造函数上获取 id 字符串时,我该如何处理注入呢?
我认为唯一可行的方法是在类构造函数上传递一个闭包,该闭包执行以下操作:
$getMongoId = function( $id ){
return new MongoId( $id );
};
和
class MyMongo
{
function __construct( MongoClient $client, Closure $mongoIdGetter){...}
}
[编辑以修复最后一部分]
但这是正确的处理方式吗?当然,如果我们使用 DiC,我们可以做到,但是要求构造函数的闭包似乎有点多。我对注入我的依赖关系太教条了吗?我想我可以通过在新类中使用“new MongoId($_id)”来轻松解决这个问题。