【发布时间】:2023-03-27 17:10:01
【问题描述】:
我们刚刚开始齐心协力在我们的项目中统一使用依赖注入,我遇到了一个问题。
我正在编写一个类来处理我们的 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)”轻松解决这个问题。
【问题讨论】:
标签: php mongodb dependency-injection