Прежде всего, практически невозможно заставить его действительно работать правильно.Чтобы иметь хоть какой-то шанс на правильную работу, вам нужно обернуть множество каскадных модификаций в транзакции, чтобы у вас не было несинхронизированных элементов при изменении одной части базы данных, но вы обновляете другие, которые зависят отпервый.Это означает, что код, который должен быть простым и осведомленным только о бизнес-логике, внезапно должен знать о всевозможных проблемах параллелизма.
Во-вторых, поддерживать его в работе практически невозможно - каждый раз, когда кто-то касается бизнес-логикиим нужно снова заняться этими проблемами параллелизма.
В-третьих, это затрудняет понимание ссылочной целостности - в будущем, когда кто-то захочет узнать о структуре вашей базы данных, ему придется провести обратный инжиниринг.это из вашей бизнес-логики.Имея это в базе данных, она отдельная, так что то, на что вы должны смотреть только , касается ссылочной целостности, а не всевозможных не связанных проблем.У вас есть (например) прямые цепочки логики, показывающие, что вызовет изменение определенного поля.По крайней мере, для нескольких баз данных эта логика может быть автоматически извлечена и превращена в довольно полезную документацию (например, древовидные диаграммы, показывающие зависимости).Извлечение информации такого же типа из BLL, скорее всего, будет довольно серьезным проектом.
Несомненно, есть некоторые моменты в другом направлении, и причины для того, чтобы все это обрабатывать вручную, - это масштабируемость и производительность.самый очевидный.Однако когда / если вы идете по этому пути, вы должны знать, что вы отказываетесь, чтобы получить эту производительность.В некоторых случаях это выгодный компромисс - но в других случаях это не так, и вам нужна информация для принятия обоснованного решения.