yandex-ui / noscript

Noscript: JavaScript MVC Framework for building SPA
http://yandex-ui.github.io/noscript/
MIT License
34 stars 22 forks source link

ns.Model: должен ли быть exception когда мало параметров? #452

Open chestozo opened 10 years ago

chestozo commented 10 years ago

Вот такой пример:

ns.Model.define('test-m', {
    params: {
        id: null,
        name: null
    }
});
var model1 = ns.Model.get('test-m');

Никаких ошибок, ничего. Сейчас у нас ключ модели строится по тому, что есть. Разве это правильно?

Мне вот в данный момент кажется, что правильно кидать ошибку :) А вам?

edoroshenko commented 10 years ago

У меня есть пример, когда существуют 2 экземпляра: один с параметром, второй без. Это странное решение (так получилось из-за особенностей бекенда), но вот есть такое. Правда, кажется, я там могу явно передавать null, а exception можно кидать в случае, если параметр undefined

chestozo commented 10 years ago

У меня есть пример, когда существуют 2 экземпляра: один с параметром, второй без

Это можно решить с помощью функции, или с помощью массива:

ns.Model.define('test-m', {
    params: [
        {
            id: null,
            name: null
        },
        {
            id: null
        }
    ]
});

Но если не хватает параметров для ключа - это как бы треш, что мы строим по тому, что есть.

edoroshenko commented 10 years ago

Да не надо массив. Просто "параметра нет" - это должно быть не falsy, а undefined.

Но если не хватает параметров для ключа - это как бы треш, что мы строим по тому, что есть

Согласен

doochik commented 10 years ago

Я не считаю, что надо кидать ошибку. У нас есть модели, где много параметров. В примере @chestozo мне этот список фактически придется продублировать N^2 раз.

Хотя я не против подумать на синтакисом обязательности параметров.

chestozo commented 10 years ago

У нас есть модели, где много параметров.

Ну так я про то, что сейчас у тебя эти модели могу строиться абсолютно с произвольным набором параметров и никто ничего не контроллирует. Хотя есть валидные наборы в этой куче, а есть невалидные. Нет?

doochik commented 10 years ago

Нет, не так, все параметры валидные.

chestozo commented 10 years ago

Вот у тебя модель зависит от p1, p2, p3. В какой-то момент у тебя оказывается только p1 и p2. Твоя модель будет создана только с p1 и p2. Это ок?

doochik commented 10 years ago

Да, мне имеено так и надо. Все остальные параметры для меня пустые

chestozo commented 10 years ago

Мне кажется, это жесть, когда ты не контроллируешь параметры.

А если у тебя модель в зависимости от параметров возвращает разные данные? Параметры ведь нужны для запроса данных ещё и тут их вариация может повлечь за собой баги.

У меня это всплыло всё, когда мы апали noscript сейчас и модели начали создаваться с параметрами вида. А раньше они свои параметры выбирали из ns.page.current.params.

Так вот модель начала создаваться с "тем что есть" (вместо ns.page.current.params - view.params) и всё работало хорошо, кроме того, что данные запрашивались неверные.

doochik commented 10 years ago

Это не жесть и все контроллиурется. Как я тебе уже говорил, попробуй с твоей идеалогией сделать norton commander.

chestozo commented 10 years ago

Это не жесть и все контроллиурется. Как я тебе уже говорил, попробуй с твоей идеалогией сделать norton commander.

Я ведь не против идеалогии "разные наборы параметров". Но то, что "всё контроллируется я не согласен". Пример:

ns.Model.define('panel-content', {
    params: {
        'folder-id': null,
        'letter-id': null,
        'sorting': null
    }
});

// Вот это работает и выглядит ок:
ns.Model.get('panel-content', { 'folder-id': 'inbox', 'letter-id': 1 });
ns.Model.get('panel-content', { 'letter-id': 2 });

// Вот это работает, но, кажется, неок:
ns.Model.get('panel-content', { 'sorting': 'asc' });
doochik commented 10 years ago

в моей идеологии все ок

chestozo commented 10 years ago

ну ок

edoroshenko commented 10 years ago

Хотя я не против подумать на синтакисом обязательности параметров.

Я тоже, но не сейчас. Давайте оставим пока открытым