Для уровня доступа к данным C# я хочу использовать шаблон проектирования компоновщика для построения запросов к DBContexts (для большей гибкости на уровне бизнеса, но без прямого доступа к IQueryable) быстрым способом API.
Многие запросы имеют похожую структуру:
AccountQueryBuilder.GetAccounts().ForClient("clienta").WithBalanceOver(1943.4).QueryAsync();
/// ...
ContractQueryBuilder.GetContracts().ForClient("clienta").ExpiresAfter(2020-04-01).QueryAsync();
Здесь ForClient(string)
повторно используется между различными компоновщиками. Как бы я спроектировал конструктор, чтобы я мог повторно использовать разные шаги компоновщика в разных компоновщиках, ограничивая при этом следующие доступные шаги компоновщика и не выполняя повторную реализацию ForClient(string)
для каждого компоновщика? Будет несколько повторяющихся шагов в разных комбинациях
В настоящее время у меня есть что-то вроде этого:
class BuilderA : IBuilderReady, IBuilderStepA, IBuilderStepB, IBuilderStepC, IReusableStepA<IBuilderStepA>
{
IBuilderStepA ReusableA() {/*Don't want to reimplement in every builder*/}
IBuilderStepB A() {...}
IBuilderStepC B() {...}
IBuilderReady C() {...}
IEnumerable<EntitySomething> Query() {...}
}