alexeykostylev: (Default)
Толи я такой придирчивый, толи везет мне как-то особенно, но на новой работе опять код скажем так специфичный временами. Прошедший уже через 2-х девелоперов.

Вот что делает этот репозиторий для EntityFramework'a?

Правильно, тащит все записи на клиента, сортирует и берет первую.

            var costLatest =
                UnitOfWork.CostRepository.Get(x => x.ProjectId == projectId)
                    .OrderByDescending(x => x.AsAtDate)
                    .FirstOrDefault();



Пара легких движений превращает это в следующее:

var data = AcuiteDB.Costs.Where(x => x.ProjectId == projectId).OrderByDescending(o => o.AsAtDate).Take(1);



Пугает что вроде мелочь, но всюду... Поискал поиском по solution - нашел 5 использований этого куска.

Поэтому главная страница уже открывается секунд по 30. Хорошо хоть сделано на ajax и поэтому отображается частями по мере загрузки.

Ну или вот:
Есть набор записей, по нему бегают, лезут в зависимую сущность и берут поле, которое суммируют.

var divider = latestProjectRatings
  .Where(e => projectIds.Contains(e.ProjectId))
  .Select(s=>s.Project.HSEWeighting)
  .Sum();



На деле это выливается в серию запросов к БД, по каждой записи, поскольку используется lazy loading. Ну и при большом наборе - Х запросов, пользователь сидит курит.

Про кучу css от разных версий уж молчу.

Ну это мелочи и не мои проблемы :) Мне деньги платят что бы я их решал.

А так вообще круто. Сижу теперь ковыряю сайт, всякие вкусности типа стилей, контроллеров и jquery :) Все о чем мечталось. Осталось еще на этом деньги нормальные зарабатывать.

ps. Наверно надо пояснить что метод GET в репозитории делает вызов ToList() перед возвратом, соотв. запрос на этом уходит на сервер и потом вся остальная логика идет отдельными запросами.
alexeykostylev: (Default)
Начал тут копаться в системе, нашел пару перлов :)

Код рабочий, но странный.
private static void CreateInvoiceFromDTO(ref InvoiceDTO from, ref Invoice to, UserDTO user)
{           
   to.Id = from.Id;
   to.LegalAidCaseId = from.LegalAidCaseId;
   to.StatusId = from.StatusId;
   to.ReceivedDate = from.ReceivedDate;
   ....
}


Этот чувак кстати уже сеньором работал на момент написания этого кода.

Еще видел вариации этого маппера когда to возвращают как method result.

и самый классный:
А вот это реальный косяк. Правда может работает из-за того что в Dispose() наверно еще один косяк :) Хотя может и не работает..

private IProviderServiceController CreateNewProviderServiceController()
{
   using (var controller = new ProviderServiceController())
   {
        return controller;
   }
}

Profile

alexeykostylev: (Default)
alexeykostylev

July 2017

S M T W T F S
      1
2 345678
9101112131415
16171819202122
23242526272829
3031     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 24th, 2017 02:37 am
Powered by Dreamwidth Studios