Как преодолеть очевидную дилемму REST против DRY в рельсах? - PullRequest
1 голос
/ 02 апреля 2010

Приложение для рельсов. Я работаю над примерами функций квадратного уравнения. Очевидно, что все они имеют общую структуру: ax ^ 2 + bx + c = 0.

Я не хочу хранить каждый пример этого. Я лучше сгенерирую их из шаблона. Хранение сотен возможных версий этой структуры кажется очень расточительным и не СУХИМЫМ.

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

Я уверен, что должен быть способ преодолеть это, но я все еще изучаю рельсы, и я, очевидно, что-то здесь не цепляюсь. Спасибо.

Ответы [ 3 ]

1 голос
/ 02 апреля 2010

Ответ "это зависит". Если вы когда-нибудь будете делать только примеры квадратичных уравнений, тогда вы можете просто хранить a, b и c. Если вы думаете, что собираетесь делать другие типы уравнений, сохраните все это.

То, что действительно не должно приниматься во внимание, - то, что это - «трата», чтобы сохранить полное уравнение в том смысле, что вы тратите место на диске. Если вы не храните миллионы таких вещей, не беспокойтесь об этом. Диск дешевый.

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

Еще один способ взглянуть на это - ПОЦЕЛУЙ (Keep It Simple, Stupid). Самое простое, что можно сделать, - хранить полное уравнение. Это делает получение уравнения простым извлечением из базы данных, код для генерации уравнения не требуется.

Лично, если вы не делаете огромное количество таких вещей, я бы предпочел KISS в этой ситуации. Я не был бы уверен, что система будет использоваться только для квадратных уравнений. Что вы можете сделать, так это заставить систему работать с любыми уравнениями, но заставить форму ввода взять a, b и c и превратить ее в квадратное уравнение. Если позже вам понадобятся другие типы уравнений, изменить логику ввода гораздо проще, чем изменить структуру данных.

1 голос
/ 02 апреля 2010

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

Просто используйте a,b,c в качестве идентификатора ax^2 + bx + c = 0. Затем, если ваш маршрут resources :quadratics, вы можете сгенерировать URL-адрес, например quadratic_url([a,b,c].join(',')), а в методе show QuadraticsController сгенерируйте его, выполнив generate_quadratic(params[:id].split(',').map(&:to_i)).

0 голосов
/ 02 апреля 2010

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

Если вы хотите уникальные квадратные уравнения, вы можете выбросить те, для которых a, b и c для одного уравнения отличаются от уравнений другого уравнения на постоянное кратное число.

Вы можете сгенерировать 1210 различных квадратичных уравнений, выбрав a, b и c равными целым числам от -5 до +5 включительно - конечно, a не может быть нулем - но я не знаю, так ли это хотите?

...