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, а уровень доступа к данным использует это, чтобы определить, следует ли его сохранить или нет. Однако данные о том, как хранятся данные, не имеют большого значения для уровня домена/бизнеса.
Если вы хотите реорганизовать использование хранимых процедур, то ваше приложение не должно волновать.
Я не эксперт Oracle, но я думаю, что для любой СУБД это будет зависеть от приложения и среды, а также от кода. Любая обработка на уровне строк обычно лучше всего выполняется в приложении, но логика на основе набора лучше всего работает в реляционной БД. Можете ли вы предоставить некоторую информацию о том, что делает ваше приложение, и о каком коде/логике вы говорите? – JNK
@JNK: Мое приложение. это автономное приложение Windows. Это решение для инвентаризации и выставления счетов. В настоящее время я написал классы, содержащие методы для выполнения различных операций DB, таких как Insert, Update и Delete. Интересно, могу ли я писать хранимые процедуры в самой БД и только передавать параметры через интерфейс .NET, какое преимущество это может дать? – RKh
Похоже, Тони обращается к красноречиво. Самое главное - согласованность - будущие версии приложения будут использовать одни и те же запросы и выполнять то же самое, независимо от того, кто в конечном итоге поддерживает код. Если SQL-логика находится в приложении, она, скорее всего, будет изменена. – JNK