Как стать автором
Обновить
3
0
Боря Фролов @donRumatta

Пользователь

Отправить сообщение
Не планируете продлить акцию? Заказал Бека и Чистый код, но сейчас уже жалею, что не взял заодно Чистую архитектуру.
Аудиокниги самое то. Главное не пропустить момент, когда уже проваливаешься в сон, чтобы не перематывать потом(=
«Эскалировать» — вполне себе однозначное русское слово)
marshinov, cорри, промахнулся ответом. То есть, ниже уровня контроллера имеем чтото вроде (суть задачи синтетическая, главное иерархия вызовов):

public class CreateUserHandler
    : ICommandHanler<CreateUserRequest, CreateUserResponse>
{
    CreateUserResponse Handle(CreateUserRequest request)
    {
        var hash = _mediator.Send(new HashPasswordRequest(request.Password));

       // save user logic
      
       _mediator.Publish(new UserCreatedRequest(user.Email));
    };
}

public class SecurityService
    : ISecurityService
    : IUseCaseHandler<HashPasswordRequest, HashPasswordResponse>
{
    public HashPasswordResponse HashPassword(HashPasswordRequest request) 
    {
        //...
    }
    
    HashPasswordResponse IUseCaseHandler<HashPasswordRequest, HashPasswordResponse>.Handle(HashPasswordRequest request)
        => HashPassword(request);
}

public class EmailService
    : IEmailService
    : IUseCaseHandler<UserCreatedEvent>
{
    public void SendUserCreatedEmail(UserCreatedEvent event) 
    {
        //...
    }
    
    IUseCaseHandler<UserCreatedRequest>.Handle(UserCreatedEvent event)
        => SendUserCreatedEmail(event);
}
marshinov, еще вопрос, насчет AppService-ов. В этой статье предлагается превращать его в композитный обработчик всех кейсов, которые покрываются публичными методами. Но Богард и остальные отцы-основатели не советуют вызывать хэндлеры из хэндлеров, используя их лишь на самом верхнем уровне архитектуры. Но как быть, когда аппсервис для своей задачи вызывает еще несколько компонентов, которым для работы нужны еще компоненты. Превращать все это в команды-обработчики? Или же оставлять как есть, но тогда мы получаем слабую связанность за счет, например, МедиатРа только на уровнях контроллер и контроллер-1 (где и так логика довольно проста и прямолинейна), а хотелось бы разрубить связи между компонентами, которые делают основную работу.
marshinov, подскажите, пожалуйста, как у вас в итоге хэндлеры верхнего уровня дергают хэндлеры AppService? Связь идет через Mediatr по типу команды?
Аналогичный вопрос для контроллера, как он запускает пайплайн?

Начал копать эту тему, счас движусь от «быстрорастворимого» в ширину, так что извиняюсь за элементарные вопросы.
Из современников неплох Пехов. Есть у него промахи, вроде Киндрэта, но, в целом, как погрузился в Сиалу, так не отпускает. Возможно, дело в кинематографичности произведений: читаешь, и такое ощущение, что диаблу запустил(=

По поводу одногеройных сюжетов: Имя ветра или Хроника убийцы короля совсем от этого не проигрывают. Хотя сейчас, конечно, стандарт — это прыгать по всему миру, как в Меекхане или Пространстве Кори.
Копирует и вставляет.
Тестопригодность и хороший код/архитектура понятия параллельные и не обязательно пересекаются. Но если в каком-то проекте пересеклись, то вот оно — счастье(=
Не совсем понятно, зачем в последнем примере юзать дженерики. Такой метод будет работать с тем же успехом просто за счет полиморфизма:
function washCar (car: Car) : Car
Пару недель как пишу на Реакте, основная специализация — бэк, поэтому пара элементарных вопросов:

1. В этом примере:

this.setState({ list: [...this.state.list, newItem] })

правильно ли, что, если необходимо не добавить новый элемент, а изменить свойство существующего, то Spread уже не спасет и нужно клонировать элементы массива? Делает ли Immer это за нас, можно ли написать:

draft.list[0].name = 'smth';


2. Как я понял из документации, если мы обновляем стейт с использованием текущего состояния, нужно использовать перегрузку setState, принимающую функцию (чтобы всегда основываться на самом свежем стейте). Необходимо ли это здесь, и, если нет, почему:

this.setState(
    produce(draft => {
        draft.list = draft.list.concat(newItem)
    })
Погуглите Quake Champions.
Вообще-то вышел год назад)
Во-первых, спасибо автору, наконец-то начало проясняться(= И правильно понимаю, что в первых двух примерах достаточно расширить структуру входных параметров (принимать тоже кортеж и объект с полем-агрегатором промежуточных состояний) и не усложнять введением синтетичеких методов?
Автору спасибо за попытку, но, к сожалению, все-таки не для программиста(= В отличие от этой статьи: после десятка подобных вашей наконец-то пришло понимание. А все потому, что ничего лишнего в объяснении — только код.
Зато прожил большую часть жизни в Молдове, там ситуация примерно такая. Да, законы принимаются не так лихо, зато присутствует, во-первых, прозрачность (оба лагеря опасаются явно мухлевать, как у нас), во-вторых, ощущение у населения, что твой голос имеет вес, что провоцирует на активное участие в политической жизни, опять же, в отличие от нас, где большая часть населения справедливо полагает, что никак повлиять на власть не может, и, следовательно, игнорит те же выборы.
Как раз именно это — показатель здоровой политической жизни страны.
Про Linq вообще чисто на внимательность(=
Все-таки зависит от круга общения.

Информация

В рейтинге
Не участвует
Откуда
Курск, Курская обл., Россия
Дата рождения
Зарегистрирован
Активность