0

ファイルから構成を読み取り、index.php で設定された基本的な構成変数を取得する (+ そこから設定する) すべての構成を処理するクラスがあります。

したがって、ここでポリモーフィズムを使用することにしました。Config クラスを抽象化し、これを FILE および VARIABLE クラスで拡張しました。

これらの 2 つの責任を持つ基本クラスが 100 行の長さの場合、それは良い習慣の動作ですか?

ここで私に反対票を投じないでください-プロジェクトがすでに完了しているときに、それが柔軟なソリューションではないことを知りたくないだけです。

これがコードです (ただし、リファクタリング、テスト、およびいくつかの機能の追加はありませんが、概念は明確なはずです)。

class Config {

    private $file;

    public static $configs = array();

    /**
     * Initializes basic website configurations such as base URL, or the name
     * of the index file.
     *
     * These values can be accessed through this class
    */
    public static function init($configs = array())
    {
        foreach($configs as $key => $value)
        {
            self::$configs[$key] = $value;
        }
    }

    /**
     * Returns the configuration variable which is set in the index file
     *
     * @param string $attribute
     * @return multitype:
     */
    public function __get($attribute)
    {
        return ($this->configs[$attribute]) ? $this->configs[$attribute] : -1;
    }

    /**
     * Setting path to the config file.
     * 
     * @param string $module
     */
    private function __construct($module)
    {
        // Path to the config file
        $path = APATH . 'config' . DIRECTORY_SEPARATOR . $module . '.php';

        // Set the config file to the attribute here
        $this->file = include $path;
    }

    /**
     * Return the object.
     *
     */
    public static function factory($module)
    {
        return new Config($module);
    }

    /**
     * Loads configurations from the given file.
     *
     */
    public function load($property)
    {
        // Return requested value
        return $array[$property];
    }

}
4

1 に答える 1

1

あなたがしていることには何の問題もありませんが、なぜこのようにしたいのか不思議に思います。

特定の方法で構成変数の処理を強制しようとしている場合は、それらを静的クラスに一度ロードしてください。抽象化を実践しようとしている場合、それが 100 行であろうと 1K であろうと、それが何であろうと実際には問題ではありません。

このように読み込みプロセスをカプセル化する必要があるように、構成変数が多くの異なるファイルに分散しているのはなぜだろうかと思います。通常、構成情報は起動時に一度ロードされ、保持されます。アプリの起動後にどこかの「道のり」にあるファイル/クラスが構成をロードしないか、単に実装を無視するとどうなりますか?

他に何もない場合は、'init' をプライベートにして、コンストラクターから呼び出すことをお勧めします。それ以外の場合は、'factory' を呼び出すことができますが、この手順を無視して、構成情報が存在しないと想定します。また、「configs」が静的である場合、「$this->configs」は少し大雑把に見えます。

于 2012-11-18T12:49:31.000 に答える