2009-04-17 4 views
0

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

Public Function Commit(foo as object) as Boolean

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

+0

Не могли бы вы уточнить свой код, который у вас есть в DAL? Вы передаете объект методам DAL, а затем задаете параметры для свойств этого объекта? –

+0

Russ: Да, я делаю это, но объекты, которые я передаю, являются родными типами CLR, а не объектами класса со своими собственными свойствами. – Austin

ответ

0

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

0

Итак, по существу, вы хотите перейти в List из Parameters?

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

+0

Я думаю, что это путь, но я собираюсь подождать и посмотреть, если кто-нибудь придумает что-то еще. – Austin

0

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

+0

Спасибо. Это действительно классная функция. К сожалению, мне, возможно, придется использовать 2005 или даже 2000. – Austin

0

Чтобы сохранить значения параметров, вы можете создать struct.

0

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

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