2010-11-08 3 views
1

Я прочитал «Эффективный Oracle по дизайну» Тома Ките. Там он говорит, чтобы написать большую часть кода в самой БД, чтобы уменьшить код приложения. Это хорошо в распределенной среде, но выгодно ли это в автономном приложении?В автономном приложении '., Где должна находиться бизнес-логика?

Мое приложение. находится в .NET.

+0

Я не эксперт Oracle, но я думаю, что для любой СУБД это будет зависеть от приложения и среды, а также от кода. Любая обработка на уровне строк обычно лучше всего выполняется в приложении, но логика на основе набора лучше всего работает в реляционной БД. Можете ли вы предоставить некоторую информацию о том, что делает ваше приложение, и о каком коде/логике вы говорите? – JNK

+0

@JNK: Мое приложение. это автономное приложение Windows. Это решение для инвентаризации и выставления счетов. В настоящее время я написал классы, содержащие методы для выполнения различных операций DB, таких как Insert, Update и Delete. Интересно, могу ли я писать хранимые процедуры в самой БД и только передавать параметры через интерфейс .NET, какое преимущество это может дать? – RKh

+1

Похоже, Тони обращается к красноречиво. Самое главное - согласованность - будущие версии приложения будут использовать одни и те же запросы и выполнять то же самое, независимо от того, кто в конечном итоге поддерживает код. Если SQL-логика находится в приложении, она, скорее всего, будет изменена. – JNK

ответ

2

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

Однако, если кто-либо из них прав (как я подозреваю). Тогда я, и, вероятно, большинство людей на этом сайте настоятельно советовал бы вам не идти по этому пути.

Ввод логики в БД может быть обольстительным, поскольку вы думаете: «Я могу изменить это на лету!» но это дорога технического обслуживания, от которой вы не хотите идти. Послушайте голос опыта и разделите свои проблемы.

Мое приложение. это автономное приложение Windows. Это инвентаризация и выставление счетов . В настоящее время я написал классы , содержащие методы для выполнения различных операций с БД , таких как Вставка, Обновление и Удалить. Интересно, могу ли я написать хранимые процедуры в самой БД, а только передать параметры через интерфейс .NET , какое преимущество может дать ?

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

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

public class MyDomainObject 
{ 
    public String Name {get; set;} 

    public Boolean IsValid() 
    { 
     return !String.IsNullOrWhitespace(Name) && 
      DoesNotContainInvalidCharacters(Name); 
    } 
} 

public class MyDataAccess 
{ 
    public List<MyDomainObject> GetAll() 
    { 
     //Some data access logic here 
    } 

    public MyDomainObject GetByName(String name) 
    { 
     //Some data access logic here 
    } 

    public void Save(MyDomainObject) 
    { 
     if(MyDomainObject.IsValid) 
     { 
      //Some data access logic here 
     } 
    } 
} 

Так что теперь у вас есть объект домена и доступа к данным объекта. Объект домена применяет некоторую тривиальную бизнес-логику, которая может быть проверена с помощью свойства IsValid, а уровень доступа к данным использует это, чтобы определить, следует ли его сохранить или нет. Однако данные о том, как хранятся данные, не имеют большого значения для уровня домена/бизнеса.

Если вы хотите реорганизовать использование хранимых процедур, то ваше приложение не должно волновать.

+0

Хорошо. Отлично. У вас есть что сказать, когда мой комментарий добавлен в OP? – RKh

6

Да, есть много преимуществ для ввода бизнес-логики в базе данных Oracle, даже для отдельного приложения:

  • производительности и масштабируемости, где бизнес-логика включает в себя доступ или обновление базы данных
  • Dependency отслеживания : ссылки на таблицы и другие объекты в вашем коде легко найти.
  • PL/SQL - . предназначен для написания кода, который обращается к базе данных очень просто и без необходимости создавать множество динамических SQL-подготовленных инструкций или используя обфускационный слой, такой как Hibernate, чтобы сделать это за вас.

Я бы на самом деле украсть некоторые из ответа Джоша и повернуть его на 180 градусов:

Если ваша база данных будет только когда-либо поддержку одного приложения, и ЕСЛИ вы не ожидали, что одни и те же данные, чтобы иметь различные варианты использования в зависимости, кто использовать его ... то уверен, ставят бизнес логику в ...

Applic ция.

Я имею в виду, хотите ли вы, чтобы два разных приложения обращались к тем же строкам данных, но применяли различные правила к изменениям этих данных? Какой смысл иметь «правило», если вы можете его разбить, просто используя другой путь доступа?

Обратите внимание, что я пропустил эту часть ответа Джоша:

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

Конечно, если вы планируете поддерживать несколько баз данных или бросать Oracle и начинать использовать SQL Server или что-то еще для хранения ваших данных, тогда вы не захотите использовать PL/SQL для написания кода. Но во многих, многих случаях, которые не произойдут, и вам будет недобросовестно добиваться независимости базы данных ради нее самого.

+0

@ Тони: Я собираюсь придерживаться одного продукта. Есть ли преимущества в производительности? Однако я не думаю, что это так. – RKh

+0

Там могут быть преимущества производительности: менее округлые поездки из приложения в базу данных, чтобы получить бит данных для использования в вашей бизнес-логике; статический, а не динамический SQL (меньше парсинга). С другой стороны, некоторые действительно сложные, интенсивные математические обработки будут быстрее на других языках (или я так понимаю). –

+2

@ Тони: очевидно, у нас есть философские различия, когда дело доходит до этого, но я почти никогда не работал над базой данных, к которой ** не было ** доступно несколько приложений. Каждый из них нуждается в собственном наборе бизнес-правил. В конце концов, это требует некоторого тщательного планирования, чтобы убедиться, что вы не вливаете логику приложения в базу данных. Некоторые правила имеют больше смысла для обеспечения соблюдения на уровне БД, но только те правила, которые применяются к целостности данных. Логика приложения должна быть оставлена ​​там, где она принадлежит. – Josh

Смежные вопросы