Лучшая практика для обозначения аргумента, который может означать 3 разные вещи - PullRequest
1 голос
/ 26 марта 2009

Учтите это ... Я пишу класс с именем Cache, который будет принимать путь к файлу / url или строку. Я собираюсь использовать функции PHP, такие как parse_url() и is_file(), чтобы определить, какой ввод я получаю.

вот мой пример, в PHP

class Cache {
    public function __construct($pathUriOrString) {

    }
}

Как лучше всего называть этот аргумент? Это даже допустимый способ создания класса, или это должен быть базовый класс и иметь отдельные классы, расширяющие его?

Я получил эту идею из php image , где конструкция получает либо один аргумент (путь), либо 2 аргумента (ширина и высота).

Итак, я на правильном пути, и если да, то каков наилучший способ именования аргумента, который принимает разные входные данные (и не будет путать другого разработчика в этом направлении?)

Ответы [ 4 ]

3 голосов
/ 26 марта 2009

Не могли бы вы, возможно, вызвать переменную $ resourcelocation и документировать ее соответствующим образом, то есть она должна принимать путь к файлу, путь uri или строку. Я не думаю, что это хорошая практика вызывать переменную aOrB, она должна быть общей.

Возможно, вы могли бы улучшить это, проверив входные данные функции относительно ее типа и допустимости. Если он не соответствует ни одному из поддерживаемых типов аргументов, вы должны выдать ошибку для недопустимого параметра.

Объявление класса в порядке (но без открывающей скобки), кстати ...

2 голосов
/ 26 марта 2009

Лучше сделать его подклассом дважды, один раз для строк, а другой для URL. И если пользователь вводит тот или другой, рефакторинг, поэтому они должны указать. (Если нет, то, по-видимому, ваше приложение знает, с чем оно имеет дело, - четко передайте то, что оно знает.) Попробуйте придумать такую ​​двусмысленность.

Ненавижу спрашивать, но что это может означать третье?

0 голосов
/ 26 марта 2009

Хм, вы имеете в виду, что класс будет кэшировать содержимое ресурса, на который ссылается файл / URL, ИЛИ значение строки? Я был бы обеспокоен намерением кэшировать строку, которая выглядит как файл или URL. Или намеревается кэшировать неверный файл / URL-адрес, который рассматривается как общая строка.

Я думаю, что в целом получение одного параметра для выполнения двух работ является практикой проектирования, которая может осложнить жизнь в будущем.

Лично я был бы склонен добавить второй параметр, который указывает, что является первым параметром. Или подкласс.

0 голосов
/ 26 марта 2009

В некоторых местах префикс «e» используется для «типа переменной».

# eArg can be one of 3 things:
# 1. ...
# 2. ...
# 3. ...
function somethign($eArg)
{


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...