Лучший способ обработки параметров SQL? - PullRequest
0 голосов
/ 17 апреля 2009

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

Public Function Commit(foo as object) as Boolean

Это прекрасно работает, но когда я вхожу в коммиты и обновления, которые принимают десятки параметров, это может быть много печатать. Не говоря уже о том, что два моих метода - update и create - принимают одни и те же параметры, поскольку они по сути делают одно и то же. Что меня интересует, так это то, что было бы оптимальным решением для передачи этих параметров, чтобы мне не приходилось изменять параметры обоих методов каждый раз, когда что-то меняется, а также уменьшать объем ввода :) возможные решения. Можно было бы переместить все параметры sql на уровень класса класса данных, а затем сохранить их в каком-то массиве, который я установил на бизнес-уровне. Любая помощь будет полезна!

Ответы [ 5 ]

0 голосов
/ 22 апреля 2009

Для вашей проблемы, я думаю, шаблон проектирования Iterator - лучшее решение. Передайте в реализации интерфейса, скажем, ICommitableValues, вы можете передать значение перечисления пары ключей, как это. Ключи - это имена столбцов, а значения - это значения для столбцов. Свойство даже выделено для того, чтобы возвращать имя таблицы, в которую нужно вставить это значение и / или сохранить процедуры и т. Д.

Чтобы сохранить типизацию, вы можете использовать декларативный синтаксис программирования (Атрибуты), чтобы объявить обязательные свойства, а основной класс в промежуточном программном обеспечении может использовать отражение, чтобы извлечь значения этих обязательных свойств и подготовить реализацию ICommitableEnumeration из него.

0 голосов
/ 22 апреля 2009

Спасибо за ответы, но я думаю, что я нашел лучший способ для того, что я делаю. Это похоже на использование upsert, но у меня есть один метод с именем Commit, который ищет данный первичный ключ. Если запись найдена в базе данных, я выполняю команду обновления. Если нет, я делаю команду вставки. Поскольку параметры одинаковы, вам не нужно беспокоиться об их изменении.

0 голосов
/ 17 апреля 2009

Если вы используете SQL 2008, вы можете использовать слияние для замены жонглирования вставкой / обновлением. Иногда называется upsert.

0 голосов
/ 17 апреля 2009

Вы можете создать struct для хранения значений параметров.

0 голосов
/ 17 апреля 2009

То есть, по сути, вы хотите передать в Список из Параметры ?

Почему бы не повторить функцию Commit и не принять ее в список объектов Parameter?

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