Как избежать дублирования вычислений в автомате - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть это в моем LoanProfile:

CreateMap<Loan, LoanDto>()
    .ForMember(
        dto => dto.TotalLoanAdvanced,
        loan => loan.MapFrom(l => l.TotalLoanAdvanced()))
    .ForMember(
        dto => dto.TotalInterestToLoanEndDate,
        loan => loan.MapFrom(l => l.InterestRepaymentAtLoanEndDate()))
    .ReverseMap()
    .AfterMap((dto, loan) =>
    {

    });

Где TotalLoanAdvanced() и TotalinterestRepaymentToLoanEndDate() - методы расширения для Loan.

Однако, чтобы вычислить тот общий процентмой метод продления, конечно же, вызывает TotalLoanAdvanced() для умножения на процентную ставку, что означает, что я рассчитываю TotalLoanAdvanced дважды для каждого сопоставляемого кредита.

Как мне избежать этого?

Я думал, что это может быть выполнимо с чем-то вроде BeforeMap или AfterMap, но когда я пытаюсь

.AfterMap((dto, loan) =>
{
    dto.TotalLoanAdvanced = 5000000;
});

, я вижу, что dto отображается как имеющий TotalLoanAdvanced 0.То же самое происходит, когда вы делаете это с BeforeMap:

.BeforeMap((loan, dto) =>
{
    dto.TotalLoanAdvanced = 5000000;
});

Как мне это сделать?

1 Ответ

0 голосов
/ 21 февраля 2019

У меня нет ответа о том, как исправить конфигурацию AutoMapper.Тем не менее, ваш вопрос Как мне избежать этого? и Как мне это сделать , поэтому я хочу ответить на несколько советов: не включайте бизнес-логику в конфигурацию вашего картографа.

Причина, по которой это не нужно делать, такова:

  • Объекты отображения должны быть как можно более простыми, а свойства отображения - согласно соглашению
  • Не добавляйте магию, подобную этойв конфигурации mapper, так как это усложняет понимание кода / следит за ним
  • Вы избежите таких шуток, как сейчас
  • Ваш код сложнее тестировать
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...