Функции в MySQL или PHP

Это потому, что Shape не обладает этими свойствами. Сначала вам нужно привести к определенному типу или сделать shapeFactory универсальным.

void main() {
  var s=shapeFactory('square') as Square;
  print(s.area);
  print(s.side);
  var c= shapeFactory('circle') as Circle;
  print(c.area);
  print(c.radius);
}

или

T shapeFactory<T extends Shape>(String type){
  if(type=='circle') return Circle(2) as T;
  if(type=='square') return Square(2) as T;
  throw 'Can\'t create $type.';
}

void main() {
  var s=shapeFactory<Square>('square');
  print(s.area);
  print(s.side);
  var c= shapeFactory<Circle>('circle');
  print(c.area);
  print(c.radius);
}
12
задан fabrik 18 September 2018 в 01:34
поделиться

6 ответов

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

Кроме того, оптимизатор запросов споткнется за любые выражения с функциями, если необходимо когда-либо заканчивать тем, что желали сделать что-то как "ВЫБОР.... ГДЕ MD5 (xxx) =..."

И функции базы данных не являются очень портативными в целом.

12
ответ дан 26 October 2019 в 10:47
поделиться

Лично, я пытаюсь сохранить базу данных как простую (к минимуму) со Вставкой, Обновлением, Удалить, не имея слишком большой функции, которая может использоваться в коде. Сохраненный Proc является тем же, содержите только задачу, которые являются очень близко к данным персистентности и не связанной бизнес-логике.

Я поместил бы MD5 снаружи. Это позволит встреченный, имеют это "манипулирование данными" вне объема устройства хранения данных базы данных.

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

2
ответ дан 26 October 2019 в 10:47
поделиться

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

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

Вторичная причина состоит в том, что мне нравится, когда мой код SQL является максимально портативным. Я даже не хочу пытаться считать различные разновидности SQL, которые существуют, таким образом, я пытаюсь сохранить функции (особенно нестандартные расширения) из моего кода SQL, за исключением вещей как СУММА или МИН/максимум.

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

3
ответ дан 26 October 2019 в 10:47
поделиться

Я думаю большую часть времени, Вы собираетесь хотеть оставить манипулирование данными веб-серверу, но, если Вы хотите обработать базы данных относительно таблиц, отношения, и т.д., затем идут для DB.

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

0
ответ дан 26 October 2019 в 10:47
поделиться

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

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

2
ответ дан 26 October 2019 в 10:47
поделиться

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

Однако при оглядывании StackOverflow для (моих) sql-теговых вопросов о том, использовать ли встроенный SQL или хранимые процедуры, Вы найдете, что большинство людей, отвечающих им, сильно выступает за сохраненный procs использования каждый раз, когда и везде, где возможно, даже для большинства тривиальных запросов. Можно хотеть проверить некоторые из тех вопросов видеть некоторые аргументы, способствующие другому подходу.

0
ответ дан 26 October 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: