шаблон проектирования для фильтрации данных - PullRequest
2 голосов
/ 04 сентября 2011

существует ли шаблон проектирования для фильтрации данных в динамических условиях. я делюсь страницами веб-приложения и той же базой данных и теми же таблицами для моих клиентов. например, я не хочу, чтобы клиент из компании A видел заказы для компании B, поэтому условие фильтрации выполняется в поле компании. для других страниц фильтрация может быть сделана на большем количестве полей. Я использую процедуры магазина или текст SQL для получения данных.

Я предпочитаю, чтобы фильтрация данных выполнялась сервером sql.

Ответы [ 3 ]

2 голосов
/ 04 сентября 2011

Я думаю, что хранение вашей бизнес-логики на стороне сервера sql - не лучшая идея.Фильтрация данных в SQL усложняет разработку хранимых процедур / схем.

Было бы намного проще выполнить динамическую фильтрацию с использованием некоторой среды ORM (Linq, HNibernate и т. Д.).Конечно, трудно что-то рекомендовать, не зная специфики вашего проекта, но я бы остановился на LINQ, который обеспечивает гибкий запрос данных.

0 голосов
/ 04 сентября 2011

То, что вы хотите, это в основном Isolation.

Для этого вы можете следовать нескольким правилам:

  1. Объявление в БД StoredProcedures / Views или в коде, ваши запросы всегда параметризованы CompanyName, всегда. В этом случае вы не можете вызвать любую функцию восстановления данных без указания названия компании.
  2. Убедитесь, что в ваших запросах из БД извлекаются только те данные, которые указаны в CompanyName и связаны с ним.
  3. В пользовательском интерфейсе CompanyName снова должны быть первостепенными для вашего интерфейса пользовательского интерфейса, и первое, что пользователь должен объявить.

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

Что касается LINQ vs DB, это зависит от вашего масштаба. Учтите, что LINQ будет медленнее, чем StoredProcedure или View, начиная с определенного масштаба. Но это то, что вы должны измерить. Причина с точки зрения комфорта LINQ, естественно, является более предпочтительным решением.

0 голосов
/ 04 сентября 2011

Передать company_id хранимой процедуре из приложения?

create stored procedure GetOrders(@customer_id int)
as
select * from Orders
where company_id = @customer_id;

Я забыл точный синтаксис хранимых процедур (тьфу!), Но идея звучит здраво. Это, конечно, если вы не имеете в виду что-то совсем другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...