Бизнес-объекты и динамический sql - PullRequest
1 голос
/ 27 января 2012

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

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

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

class Customer: BusinessObjectBase
{
    int Id {get;set;}
    string Name {get;set;}
    string Phone {get;set;}
}

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

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

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

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

1 Ответ

4 голосов
/ 27 января 2012

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

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

Ответственность

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

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

...