aw *_*rud 7 database stored-procedures business-rules n-tier-architecture
我一直在我的应用程序层(模型)和我的数据库层(引发错误的存储过程)中实施业务规则.
由于以下几个原因,我一直在复制我在两个地方的验证:
什么是正确的平衡?
您需要在数据层强制执行以确保数据完整性.这是你的最后一道防线,也就是数据库的工作,以帮助强制执行其数据的世界观.
也就是说,将垃圾数据扔到数据库进行验证是一种粗略的技术.通常,错误被设计为人类可读而不是机器可读,因此程序处理来自DB的错误并使其从头到尾都是低效的.
存储过程是另一回事.在当天,存储过程是处理数据层等业务规则的方法.
但是今天,在现代应用程序服务器环境中,它们已成为一种更好的放置这种逻辑的地方.它们提供了多种访问和公开数据的方式(Web,Web服务,远程协议,API等).此外,如果您的规则是CPU重(可能大多数不是),那么扩展应用服务器比数据库服务器更容易.
应用程序服务器中的大量功能为他们提供了超出数据库服务器所能做的灵活性,因此,一旦被推回到数据库中的大部分功能都被淘汰,数据库服务器被降级为"愚蠢的持久性".
也就是说,使用存储过程等确实存在性能优势,但现在这是一个调整问题,"问题变成"是否值得失去应用服务器功能以获得通过将其放入数据库服务器获得的收益".
通过app服务器,我不只是简单地谈论Java,而是.NET甚至PHP等.