【问题标题】:Location of interfaces in frameworks接口在框架中的位置
【发布时间】:2013-04-13 21:24:10
【问题描述】:

假设您有一个包含 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);
}

【问题讨论】:

    标签: php oop language-agnostic interface


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-30
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      相关资源
      最近更新 更多