Конфигурация/DSL на c#
От: alexsoff Россия  
Дата: 22.09.20 06:12
Оценка:
Предположим, что есть некоторая многоуровневая система, которую необходимо сконфигурировать.
Например, стандартные методы контроллера типа CRUD, консюмеры, продюсеры и т.д. Это можно сделать стандартными средствами библиотек (через ServiceCollectionExtentions), а можно накрутить свой конфигуратор со своим DSL.
Что-то типа:
 Configuration()
    .DefineCrudController()
        .ForEntity<Order>()
        .WithEntityFrameworkContext<MyDbContext>()
    .EndDefineCrudController()

    .DefineConsumer<MyOrdersConsumer>()
        .ForChannel("my-queue")
    .EndDefineConsumer<>()

Потом это все разматывается и вызываются соответствующие вызовы ServiceCollectionExtentions библиотек.
Главный плюс этого подхода — декларативность, мы собираем в одном модуле всю логическую структуру, т.е. можем эти модули независимо друг от друга компоновать и управлять (разделяй и властвуй).
Но, какие еще варианты есть в C# задать этот самый DSL, кроме описанного приема MethodsChain?
Xml/Json — нет проверки типов при компиляции, есть вариант нацепить на них source generators, но пока там все "сырое".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.