Мне нужен хороший шаблон для "все", "много" или "один"


В моем конкретном использования здесь, я использую две функции в одной вещи.

Допустим просьбе пользователей заходит на выберите "все" записи, в этом случае я хотел бы передать некоторые код, такие как:

function getRecords() {
    return some_sql("Select * from whatever WHERE id > 0;");
}

Но тогда я хочу, чтобы запустить только одну запись, Я сделаю

function getRecords(SomeID) {
    return some_sql("Select * from whatever WHERE id = SomeID;");
}

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

function getRecordsByID(someArray(1,2,3,10,11,99)) {
    var someIDs = "";
    for (i in someArray) {
        someIDs = "(" + someArray.join(",")  + ")";
    }
    return some_sql("Select * from whatever WHERE id IN SomeIDs;");
}

Я понимаю, что я мог бы использовать курс getRecordByID везде я использовал getRecord, но я не могу сделать это для getRecords.

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



342
4
задан 3 июня 2011 в 05:06 Источник Поделиться
Комментарии
3 ответа

Зачем вам один способ делать три логически разные вещи? Каждый способ защиты должен действительно выполнять только одну задачу. В чем проблема просто нужны потребителю выбрать метод отбора, основанный на их потребности, вместо того, чтобы иметь один способ подходит для всех вещь? Если действительно три способа не то, что вы хотите, если вы подадите команду шаблон объекта на объект базы данных, чтобы выполнить нужную функциональность?

5
ответ дан 3 июня 2011 в 06:06 Источник Поделиться

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

Что вы могли бы сделать, это иметь вспомогательную функцию

function getRecordsByCondition(condition) {
return some_sql("Select * from whatever WHERE "+condition+";");
}

затем вызывать ее из другой функции.

Также getRecord может быть реализован как частный случай getRecordsByID с массивом размер 1.

2
ответ дан 4 июня 2011 в 06:06 Источник Поделиться

Просто предложение:

function getAllRecords();
function getRecords(int[] recordIds){...}

1
ответ дан 6 июня 2011 в 08:06 Источник Поделиться