我正在重构大量代码以使其更具可测试性,并且我有一堆依赖于实例化数据库对象的有用函数.
像这样的事情:
function id_from_name($table, $name)
{
$db = get_database();
//code that returns an id
}
function username_from_user_id($id)
{
$db = get_database();
//code that returns a username
}
还有更多类似id_exists,id_active等的信息.
现在,我认为这不是正确的选择,因为对象可能应该作为参数传递?但这意味着每次我要使用一个函数时,都要在每个函数中创建并发送一个新对象.
所以,我的问题确实是:我是否应该将这些函数移入可以访问数据库对象的类/库中?我上面显示的示例通常是一种不好的处理方式吗?
解决方法:
确实,更好的方法是上课.您将把数据库对象传递给构造函数,并使其成为实例变量.这样,每个函数都可以访问数据库对象.
现在,实例化实例的原因被认为很糟糕.您在每个函数中使用的数据库对象是因为,例如,如果您决定一天更改数据源,则可能需要进行大量重构.如果将数据库对象传递给构造函数,则只需将正确的对象传递/注入到类中,而无需任何重构.
…有关DI的更多信息…
通过将对象传递给构造函数,您还可以创建更清晰的API =>您知道哪个对象依赖于另一个对象,您确切知道哪个类使用您的DB对象.如果您像在函数中那样开始实例化或以静态方式访问它,我将不得不浏览所有类以查看在何处使用DB对象.再有一点,依赖性注入迫使SRP(单责任原则)=> 1.如果开始注入太多对象(构造函数有很多参数),则应该怀疑您的类做得比应做的要多,然后开始重构.
标签:php,class,function
来源: https://codeday.me/bug/20191030/1965768.html