接口在框架中的位置

时间:2013-04-20 16:00:25

标签: php oop language-agnostic interface

假设您有一个包含2个组件的框架,这些组件位于不同的文件夹和命名空间中。您希望将它们分离到一个级别,每个级别都可以单独使用。

第一个类提供某种功能,比如将消息写入日志文件:

<?php
namespace \Sample\Log;

class Logger impements LoggerInterface {
public function log($message) { //Write message into log file } }

第二个类还提供了框架功能,但也应该能够使用提供的类编写日志消息。

namespace \Sample\Config;

    class Config
    {

    protected $logger;

    public function setLogger(LoggerInterface $logger)
    {
    $this->logger=$logger
    }

    public function loadConfig(){
    include('config.php')
    $this->logger->log('Config file loaded!');
    }

    }

接口的位置应该允许框架用户仅使用配置类?它们应该在Sample / Interfaces /,Sample / Logger /,Sample / Config /还是其他地方?我提供的所有三个选项都有一定的优缺点,所以我不确定应该把它放在哪里。

<?php

interface LoggerInterface
{
public function log($message);
}

1 个答案:

答案 0 :(得分:1)

如果有很多,我会选择Sample/Interfaces。如果不是,例如Samples/Shared之类的东西。但这实际上更多的是偏好或设计决定,而不是规则或其他。含义:由您决定。

但是,只是为了记录,有一个标准的记录器接口已被php框架社区接受:

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md

如果您正在编写框架,那么您应该真正了解所有可接受的标准。第一个(psr0)实际上是强制性的。我猜你已经在关注它了。