Php ';不健康的';工厂模式的使用?

Php ';不健康的';工厂模式的使用?,php,mysql,oop,factory-pattern,Php,Mysql,Oop,Factory Pattern,我想知道这是否是对工厂模式的“不健康”使用,或者是否完全合理: <?php //ConnectionFactory.class.php /** * Generates prepared mysqli connection instances */ class ConnectionFactory { public static function make(){ $c = new mysqli('localhost'

我想知道这是否是对工厂模式的“不健康”使用,或者是否完全合理:

<?php //ConnectionFactory.class.php

    /**
     * Generates prepared mysqli connection instances
     */
    class ConnectionFactory {
        public static function make(){
            $c = new mysqli('localhost', 'testusername', 'fakepassword');
            if ($c->connect_error) throw new ConnectionException("Connection failed");
            return $c;
        }
    }
    class ConnectionException extends Exception {}
?>

或者使用预填充参数扩展mysqli类更合适吗?我曾想过这样做,但这似乎违反了mysqli类的“纯洁性”。也许我想得太多了

我的用法来自于拥有许多用于进行数据库事务的类。在所有的例子中,我都看到用户名/密码/主机/等等在每次使用中都被重新编写,这看起来也不像OOP

值得注意的是,我真的更喜欢使用单例,这让我觉得这是一个完美的机会(据我所知,只需要一个连接,这将是一个巨大的性能提升),但我试图避免这种诱惑,因为我听说它们被认为是OOP癌症


也许问题在于我不应该在这么多地方使用mysqli类,而应该使用带有静态“do query”函数或类似功能的类。关于这个问题的所有想法都得到了极大的赞赏

你对这个问题分析过度了。如果您不能决定数据库连接的完美实现,您将永远无法完成任何事情

在这种情况下,单例是有意义的,因为确保每个进程只打开一个连接比深奥的OOP准则重要得多

听起来您正在考虑编写一个精简的db抽象,虽然我认为这可能比您直接使用mysqli对象的代码要好一点,但您应该知道这是一个老生常谈的领域。如果你真的想成为数据库不可知论者,不要重新发明轮子。。。只需使用PDO或其他一些DB抽象或映射工具


虽然使用mysqli代理对象而不是直接的mysqli交互实际上不会实现db不可知论,但它确实有其他好处。自定义查询日志记录、SQL健全性检查、分片逻辑和许多其他东西都可以存在于精简db包装器中。我建议您编写代理对象,并在某个静态变量或单例中实例化它,然后称之为好的。“面向对象的纳粹”可以继续争论它的完美性,而你却在做更重要的事情。

你是对的,这是对一个简单问题的过度思考。。。我主要是想巩固我的OOP原则。我不是在寻找PDO类型的解决方案(我还没有使用访问抽象),所以如果我的代码给人留下这样的印象,我深表歉意。我要寻找的主要是一种“模板化”我的访问类型的方法。。。不必到处重新写入用户名/密码。我注意到mysqli能够在INI文件中存储“默认”数据。这不是一个巨大的安全问题吗?