Привет, вот есть код:
[TestCaseSource(nameof(AuthTestCases))]
public void AuthMethod_IsNotConfigurable(Action<ConsumerConfig> initialize)
{
var consumerConfig = new ConsumerConfig();
initialize(consumerConfig);
var e = Assert.Catch<ArgumentException>(() => consumerConfig.Configure(new KafkaOptions()),
"Configure authentication using KafkaOptions.");
Assert.That(e!.Message, Is.EqualTo("Configure authentication using KafkaOptions. (Parameter 'config')"));
}
private static IEnumerable<Action<ConsumerConfig>> AuthTestCases()
{
yield return x => x.SecurityProtocol = SecurityProtocol.Plaintext;
yield return x => x.SaslMechanism = SaslMechanism.Plain;
yield return x => x.SaslOauthbearerConfig = "";
yield return x => x.SaslUsername = "";
yield return x => x.SaslPassword = "";
yield return x => x.EnableSslCertificateVerification = true;
}
ConsumerConfig тут плоский объект с настройками. Метод Configure проверяет, что какие-то определенные настройки не поменяли или заданы логин, пароль, например. Все это работает корректно.
В мое осознание никак не помещается момент, что над плоскими настройками мы можем выполнить какие-то действия, которые завернуты в анонимную лямда-функцию. Типа, что за функция придет - непонятно, нужно смотреть все вызовы (ну в данном случае все на одном экране, но обычно вызовы черти где). Что может быть внутри этой функции, тоже непонятно, да что угодно.
Ну как бы, когда читаю такой код, как в этом моменте, например, с трудом, но разбираюсь, как он работает. И по другому, попроще, тут не сделать - то есть это обычный нормальный подход. В реальном коде, когда все разбросано по разным файлам, еще тяжелее понимать, что происходит, но в целом просто нужно больше времени, чтобы осознать как работает код.
А вот сам писать такое вообще не могу. И в этом и заключается вопрос, как можно принять и усвоить такой подход? Может есть что-то почитать/посмотреть или упражнения какие-то?