RSCG – StepwiseBuilderGenerator

RSCG – StepwiseBuilderGenerator    

name StepwiseBuilderGenerator
nuget https://www.nuget.org/packages/StepwiseBuilderGenerator/
link https://github.com/Georgiy-Petrov/StepwiseBuilderGenerator
author Georgiy Petrov

Generating Builder- as steps

 

This is how you can use StepwiseBuilderGenerator .

The code that you start with is

  <Project Sdk="Microsoft.NET.Sdk">    <PropertyGroup>     <OutputType>Exe</OutputType>     <TargetFramework>net8.0</TargetFramework> 	  <Nullable>enable</Nullable>   </PropertyGroup>  	  <PropertyGroup>         <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>         <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>     </PropertyGroup>  	  <ItemGroup> 	    <PackageReference Include="StepwiseBuilderGenerator" Version="1.0.3" /> 	  </ItemGroup>  	   	   </Project>   

The code that you will use is

  using Builder;  var pOld = new Person(); pOld.MiddleName = "G"; var pNew= pOld     .SetFirstNameBld("Andrei")     .SetLastNameBuilder("Ignat")     .Age(55)     .Build(it=>it)     ;    //var build = new PersonBuilder() //    .WithFirstName(pOld.FirstName) //    //.WithMiddleName("") // it is not into the constructor //    .WithLastName(pOld.LastName) //    ;      //var pNew = build.Build(); System.Console.WriteLine(pNew.FullName()); System.Console.WriteLine(pOld.FullName());   
  using StepwiseBuilderGenerator; using System;  namespace Builder; [StepwiseBuilder] public partial class Person {     public Person()     {         new GenerateStepwiseBuilder()            .AddStep<string>("SetFirstNameBld", "FirstName")            .AddStep<string>("SetLastNameBuilder", "LastName")            .AddStep<int>("Age")              .CreateBuilderFor<Person>();     }     //public Person(string firstName, string lastName)     //{     //    FirstName = firstName;     //    LastName = lastName;     //}     //public string FirstName { get; set; }     public string? MiddleName { get; set; }     //public string LastName { get; set; }      public string FullName()     {         return FirstName + " " + MiddleName + " "+LastName;     }      }   

  The code that is generated is

 using StepwiseBuilderGenerator; using System;  namespace Builder; public interface IPersonSetFirstNameBld  {     IPersonSetLastNameBuilder SetFirstNameBld(string value); } public interface IPersonSetLastNameBuilder  {     IPersonAge SetLastNameBuilder(string value); } public interface IPersonAge  {     IPersonBuild Age(int value); } public interface IPersonBuild  {     Person Build(Func<Person, Person> buildFunc); } public partial class Person : IPersonSetFirstNameBld,IPersonSetLastNameBuilder,IPersonAge,IPersonBuild  {    public string FirstName;     public string LastName;     public int AgeValue;      public IPersonSetLastNameBuilder SetFirstNameBld(string value)     {         FirstName = value;         return this;     }     public IPersonAge SetLastNameBuilder(string value)     {         LastName = value;         return this;     }     public IPersonBuild Age(int value)     {         AgeValue = value;         return this;     }     public Person Build(Func<Person, Person> buildFunc)     {         return buildFunc(this);     }      public enum Steps     {         SetFirstNameBld,         SetLastNameBuilder,         Age,     } } public static partial class StepwiseBuilders {     public static IPersonSetFirstNameBld Person()      {          return new Person();     } }  

Code and pdf at https://ignatandrei.github.io/RSCG_Examples/v2/docs/StepwiseBuilderGenerator