Я задал этот вопрос гораздо более многословно несколько дней назад , и тот факт, что я не получил ответов, не удивителен, учитывая длину, поэтому я решил, что получуближе к делу.
Я должен принять решение о том, что отображать пользователя, основываясь на его назначении конкретному клиенту.Доменный объект выглядит как этот значительно упрощенный пример:
public class Customer
{
public string Name { get; set; }
public IEnumerable<Users> AssignedUsers { get; set; }
}
В реальном мире я также буду оценивать, имеют ли они разрешения (используя побитовые сравнения для флагов безопасности) для просмотра этого конкретного клиента.даже если они не назначены ему напрямую.
Я пытаюсь придерживаться принципов доменного проектирования (DDD).Также я использую LINQ to SQL для доступа к данным.На моем уровне обслуживания я предоставляю пользователю, запрашивающему список клиентов, который сейчас составляет около 1000 единиц и растет примерно на 2% в месяц.
Если я строго придерживаюсь логики в своем уровне обслуживания, янужно будет использовать Linq для выполнения .Where
, который оценивает, содержит ли список AssignedUsers
пользователя, запрашивающего этот список.Это вызовет каскад запросов для каждого Customer
, когда система перечисляет до конца.Я не проводил никакого тестирования, но это кажется неэффективным.
Если бы я выдумал отсутствие логики в данных, то я мог бы просто иметь метод GetCustomersByUser()
, который будет делать EXISTS
тип SQL-запроса и оценки безопасности одновременно.Это, безусловно, будет намного быстрее, но сейчас я говорю о логике, попадающей в базу данных, которая может создать проблемы позже.
Я уверен, что это распространенный вопрос, который возникает у людей при развертывании Linq.... какие-либо предложения о том, какой путь лучше?Является ли снижение производительности нескольких запросов Linq лучше, чем логика в моей базе данных?