数据过滤的设计模式
本文关键字:设计模式 过滤 数据 | 更新日期: 2023-09-27 18:07:22
是否存在动态条件下数据过滤的设计模式?我正在为我的客户共享web应用程序页面和相同的数据库和相同的表。例如,我不希望A公司的客户看到B公司的订单,因此在company字段上执行过滤条件。对于其他页面,可以对更多字段进行过滤。我正在使用存储过程或SQL文本来获取数据。
我希望数据过滤将由SQL服务器完成
我认为将业务逻辑存储在sql server端不是最好的主意。在SQL中过滤数据会使您的存储过程/模式设计更加复杂。
使用ORM (Linq, hibernate等)框架进行动态过滤会简单得多。当然,如果不了解你的项目的具体情况,很难推荐一些东西,但我会推荐LINQ,它提供了灵活的数据查询。
将company_id
从应用程序传递到存储过程?
create stored procedure GetOrders(@customer_id int)
as
select * from Orders
where company_id = @customer_id;
我忘记了存储过程的确切语法(啊!),但是这个想法是合理的。当然,除非你的意思完全是别的。
你想要的基本上是一个Isolation
。
要做到这一点,你可以遵循以下几个规则:
- 在DB StoredProcedures/Views或代码中声明您的查询总是由
CompanyName
参数化,总是。在这种情况下,如果不指定公司名称,则无法调用任何数据恢复函数。 - 确保在您的查询中,只有由CompanyName指定并链接到它的数据从DB中检索。
- On UI CompanyName必须再次成为UI界面的首要元素,并且是用户必须声明的第一件事。
像这样,如果不知道项目的实际需求,很难说出更精确的东西。
LINQ vs DB是什么,这取决于你的规模。考虑到从一定规模开始,LINQ将比StoredProcedure或View慢。但这是你必须测量的东西。因为从舒适的角度来看,LINQ自然是更好的解决方案。