Здравствуйте, Spinifex, Вы писали:
Serg>>>>Ты неправильно мня понял. Я как раз против универсального GetUsersOnTheFlat. Одно дело, когда нужно получить список пользователей на этаже для того, чтобы отправить им почтовое уведомление, а другое дело, когда нужно начислить им компенсацию за не работающий лифт. Или уволить всех скопом.
Serg>>>>Если сделать универсальный метод, возвращающий коллекцию пользователей с полным набором атрибутов, то работать он будет везде неэффективно.
S>Я не вижу здесь каких либо препятствий. Это издержки примера, придуманного за 2 минуты.
Это не издержки примера, а издержки подхода.
S>Понятно, что если бы я начал тюнить код, то вытаскивал бы не пользователя, а string с email. Хотя в общем и целом лично я не склонен преувеличивать нагрузку от вытаскивания всей сущности целиком. Да, иногда это действительно заметно и тут надо тюнить. Но в большенстве случаев скорее наоброт ты за один раз вытаскиваешь сущность, части которой потом ниже используешь. Может сложится обратная ситуация, когда ты вместо этого постоянно дергаешь базу ради разных частей одной сущности. Одним словом It depends.
В учебных примерах — да, вытаскиваем всю сущность. В реальном мире начинаем тюнить.
Интересно, как будет выглядеть этот тюниг в случае с GetUsersOnTheFlat ?
S>>Я уже второй пост пишу о том, как в linq2db избавиться от дублирования логики джоинов и условий.
S>Ну это не прирагатива linq2db
Многие так умеют.
Значит согласен, что вариант с linq2db тоже не требует дублирования? Ну OK ))
Serg>>>>Торчат наружу не коллекции, а IQueriable интерфейсы к таблицам, что позволяет гибко извлекать ровно те данные, которые нужны для конкретного сервиса.
S>>>А должно торчать DbNorthwind.Query<User>, DbNorthwind.Query<Organization>, DbNorthwind.Query<Message>. Понятна разница?
S>>Разницу вижу, но не в пользу твоего варианта. Зачем мне целый User, если мне нужен только электронный адрес?
S>???
S>DbNorthwind.Query<User>.Where(u => u.Room.Flat == flat).Select(u => new { StreetName = u.Room.Building.Street.Name, OrgName = u.Organization.Name })
Так. Что здесь User и что здесь Query<User> ?