Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Category:

Абстрактная фабрика синглтонов

Вот уж не думал, что когда-нибудь буду всерьёз предлагать сабж.

Но мы тут делаем пилотный проект сервиса на C#, Dotnet Core, Akka.Net и Linux.

Код пока очень сырой, мы больше рефакторим, чем реально пишем, поскольку непонятно, как перекрутить свои мозги для акки. На то он и пилотный проект. И всё ещё усугубляется тем, что в акке акторы дебильные, по сравнению с Эрлангом - например, нет блокирующих вызовов. Дотнетовская акка - копия джавовской.

Ну и нам понадобился HTTP-клиент. Как его делать "на акторах"?

Я решил, что основной принцип - актор на каждый чих. То есть, HttpClient.Get выглядит так (у нас на самом деле пока не так, но не суть важно):

1. Cоздать HttpActor, параметры запроса - параметры конструктора.
2. Дождаться от него сообщения

Так вот, нам приспичило писать тесты. Ну то есть без тестов вообще ничего более-менее сложного написать нельзя, и наш прототип достиг той фазы, когда хорошо бы написать что-то дабы избежать ручных тестовых прогонов.

Для этого очень хочется мокать HttpClient. Но я хочу мокать не хелпер-класс HttpClient, а актор HttpActor. Преимущество - в том что акторы нетипизированные и не надо будет лепить IHttpActor, HttpActor и MockHttpActor.

Ну и у нас "because we can" подключен AutoFac DI, так что хочется как-то задействовать его.

Так что я нашёл на гитхабе репу, которая делает то что мы хотим: мокает дочерний актор.

Но делает она его, мамочки!

https://github.com/sachabarber/AkkaNetDITesting

Усугубляется это тем, что для нужд перезапуска акторов нужно уметь заново вызывать старый конструктор со старыми параметрами, для чего в Акке есть свои фабрики. Ну и получается что акковские фабрики сидят на аутофаковских фабриках и акторами погоняют.

Решили запилить минимальный пример в духе этой репы, но попробовать сократить количество бойлерплейта и параметризации. Например, в автофаке есть named services:

https://autofac.readthedocs.io/en/latest/advanced/keyed-services.html

Ну и получится пирамида из фабрик всё равно, но с меньшим количеством хелпер-классов. Будет автофаковская именованная фабрика акковских фабрик.

Есть ещё трёхэтажный вариант с аутофаковской фабрикой абстрактных фабрик акковских фабрик. Но надеемся что до этого дело не дойдёт.

В-общем я бы конечно хотел отказаться от всего этого говна и сделать на го. Но нет!
Tags: programming, все пидарасы а я, выебудни
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 36 comments