2012-01-27 4 views
1

У меня была эта идея и моя первая реакция после того, как она была «Это отличная идея, но почему я никогда не видел/не слышал, чтобы она говорила раньше?» Поэтому я надеюсь, что вы скажете мне, есть ли какие-то рамки, которые уже делают это, или если есть какая-то причина, почему я должен ее избегать.Бизнес-объекты и динамические sql

Идея состоит в том, чтобы создать базовый класс бизнес-объектов с методами динамической записи запросов CRUD sql на основе имени производного класса и его свойств (или псевдонимов, указанных в атрибутах).

Мое мышления является то, что когда-то я делаю это я мог бы просто создать новый класс, как так:

и мой класс клиентов, имеющий доступ к методам CRUD BusinessObjectBase, в будут сделаны.

Что-то нужно иметь в виду при ответе на это: Для этого вопроса меня очень интересуют цели проектирования, связанные с сокращением времени разработки и низким уровнем обслуживания, а безопасность составляет около 3 по шкале от 1 до 10. Другими словами, я не заинтересован в том, чтобы слышать ответы, говорящие мне, что я должен использовать хранимые процедуры для доступа к данным, потому что они более безопасны или что-то в этом роде.

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

Существуют ли какие-либо существующие рамки для этого или есть какая-то веская причина, почему я не должен?

+0

Вы очень много изобретаете еще один ОРМ здесь. Это забавно, если вы этого не делали раньше, но если вы не делаете это ради удовольствия, это полная трата времени, когда есть уже имеющиеся высококачественные многофункциональные ORM. Вы создадите очень плохой, неполный и, вероятно, багги-обычай ORM, который никто не любит, кроме вас. –

ответ

4

Это было сделано раньше; много раз, много способов. Основная концепция, о которой вы думаете, называется «первой моделью». Вы можете сделать модель сначала в Entity Framework, NHibernate, Subsonic и многих других стилевых фреймах ORM. Еще одним воплощением этой линии мышления является LINQ-to-SQL, где LINQ знает, какие запросы нужно генерировать, независимо от того, хранились ли вы CRUD-процессы.

Перед тем, как ORM были основными, мы используем файлы кода (в наши дни кодированные в шаблонах стиля T4), чтобы написать, что вы описываете. Вся идея была основана на «соглашении», означающем, что если поле имеет идентификатор ID, тогда оно должно быть кластеризованным PK и так далее.

Отказ

С учетом сказанного, есть обратная сторона этой линии мышления. В вашем типичном веб-приложении (или вставьте в него стиль приложения) у вас есть три уровня для работы с клиентом, средой и БД. При разработке модели/кода вы фактически игнорируете один из трех уровней. Современное оборудование стало достаточно быстрым, чтобы вы могли сделать это для большинства сайтов. Когда ваш сайт растет в объеме & сложности, однако вы часто окажетесь вокруг этой автоматической настройки для самых сложных/часто используемых сценариев.

В любом случае, надеюсь, что это поможет.

+0

Спасибо, это ориентировано на систему POS с выигрышами, и многие из проблем, которые обычно приводят к этим типам разговоров, не являются первоочередными и некоторые из допущений (например, существует реальная dba для сотрудников, которые записывают/управляют сохраненными procs) также не верны. Поэтому я пытаюсь найти эту промежуточную площадку, которая отвечает нашим потребностям, не добавляя лишних накладных расходов.Как вы сказали, я был уверен, что это было сделано раньше, но я удивлен, что не нашел каких-либо фреймворков в моих поисковых поисковых системах. Вы знаете о каком-либо? –

+0

Entity Framework, NHibernate и Subsonic являются фреймворками. Идеи одинаково хорошо применяются в winforms/WPF, веб-приложении или сценарии POS. Я не понимаю, почему эти идеи предполагают DBA или добавляют лишние накладные расходы. Это правда, что оставляя SQL в рамках фреймворка, обязательно устраняет некоторые настройки/оптимизацию управления из ваших рук, но попробуйте и посмотрите, как он работает для вас, прежде чем работать над преждевременными оптимизациями. Или я чего-то не хватает? – EBarr

+0

@BrandonMoore это может быть полезным ориентиром ... http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx – EBarr