1

我目前正在尝试实现一个简单的依赖注入容器,它使用 XML 来定义类依赖项。我的问题主要与设计有关。

这是我正在考虑使用的示例 XML 模式:

<?xml version="1.0">
<classes>
    <class name="MySQLDatabase">
        <namespace>MyLib\Database\</namespace>
        <dependency type="constant">my_db_username</dependency>
        <dependency type="constant">my_db_password</dependency>
        <dependency type="constant">my_db_database</dependency>
    </class>
        <class name="LoginManager">
        <namespace>MyLib\Authentication\</namespace>
        <dependency type="class">MySQLDatabase</dependency>
    </classes>
</classes>

我的第一个问题是,有没有人预见到类似于上述模式的任何问题?

我的第二个问题是,我应该如何将其转换为我的定义数组?这个问题不是关于如何解析 XML,而是关于在解析后保存信息的数组的设计。

如果我用 Java 编写代码,我会考虑这样的事情,但我不确定这是否太庞大以及如何将其转换为 PHP,它似乎没有与 Java 相同数量的数据结构做。

class DIClass {

    public HashMap<String, ClassDefinition> definitions;

    // example
    // definitions = map of the classes below
    // ...
}

class ClassDefinition {

    private String name;
    private String namespace;
    private List<Dependency> dependencies;

    // example
    // name = MySQLDatabase
    // namespace = MyLib\Database\
    // dependencies = list of the class below, ordered
    // ...
}

class Dependency {

    private String name;
    private String type;

    // example
    // name = my_db_username
    // type = constant
    // ...
}

我的最后一个问题是,为持久性添加一个定义怎么样?例如,数据库类应该是单例。<persis />我应该在 XML 文件的类定义中添加一个额外的标签吗?

感谢您的关注。

4

1 回答 1

2

我的第一个问题是,有没有人预见到类似于上述模式的任何问题?

你在重新发明轮子。PHP 是一种脚本语言,因此您也可以使用 PHP 文件来代替 XML 文件——它对 PHP 的表现力更强 :)

我的第二个问题是,我应该如何将其转换为我的定义数组?这个问题不是关于如何解析 XML,而是关于在解析后保存信息的数组的设计。

您可以通过首先模拟一个数组然后向后思考来做到这一点,例如如何将数组中的信息存储到 XML 文件中 - 或者完全删除 XML 并加载数组(参见上面的点)。

我的最后一个问题是,为持久性添加一个定义怎么样?例如,数据库类应该是单例。我应该在 XML 文件的类定义中添加一个额外的标签吗?

如果你需要它们一个单例,实例化它们一次,就是这样。您通常不需要 PHP 中的单例持久性。这是一个很大的误解(如果您来自 Java 背景,这将提供一个很好的见解:单例在 PHP 中使用的很少——如果不是说不的话(必须阅读))。

另请参阅以下相关问题:

于 2013-06-12T08:04:20.140 回答