Executando verificação de segurança...
3

C4Sharp : diagramação de modelos C4 através da linguagem C#

logo

Com a recente popularidade do C4 model, um conjunto de novas ferramentas surgiu para facilitar a criação e adoção dessa abordagem. Vários projetos, como Structurizr, oferecem diversos recursos (pagos e gratuitos) para equipes explorarem as possibilidades da diagramação C4 model.

Nessa linha, C4Sharp é uma biblioteca dotnet criada por um 🇧🇷 brazuca, oficialmente listada no site do C4 Model e pessoalmente recomendada pelo Simon Brown. Ela funciona como um super-set do C4-PlantUML, por meio do qual os desenvolvedores podem criar, compartilhar e consumir diagramas de modelo C4 como código C #.

Foi desenvolvida com objetivo de fornecer um ambiente local de geração dos diagramas e arquivo PUML, e também uma DSL mais amigável e focada para desenvolvedores .net que utilizam a linguagem C#. Veja um exemplo a seguir...

namespace C4Bank.Deposit.Architecure;

public class ContainerDiagram : DiagramBuildRunner
{
    protected override string Title => "C4Bank Context of Deposit Area";
    protected override DiagramType DiagramType => DiagramType.Container;
    

    protected override IEnumerable<Structure> Structures() => new Structure[]
    {
        new Person("Customer", "Customer", "Bank Customer"),
        new SoftwareSystem("OTBank.Finance", "Finance", "OTBank Finance System", Boundary.External),
        new SoftwareSystem("C4Bank.Account", "Account", "C4Bank Account System"),
        new Api<DepositReceived>("Aspnet/C#", "ACL"),
        new EventStreaming<RegisteredAccount>("kafka", "Partition 01"),
        
        SoftwareSystemBoundary.New("Deposit",
            new Api<DepositoProcessingWorker>("C#"),
            new Database<IDepositRepository>("SQL Server", "Deposit Data Base"),
            new ServerConsole<SynchronizeNewAccountConsumer>("C#", "Kafka Consumer"),
            new Database<IAccountRepository>("SQL Server", "Account Data Base")
        ),
    };

    protected override IEnumerable<Relationship> Relationships() => new[]
    {
        It("Customer") > It("OTBank.Finance") | "send deposit",
        It("OTBank.Finance") > It<DepositReceived>() | ("POST", "HTTP"),
        It<DepositoProcessingWorker>() < It<DepositReceived>() | ("POST", "HTTP"),
        It<DepositoProcessingWorker>() > It<IDepositRepository>(),
        
        It("Customer") > It("C4Bank.Account") | "register",
        It("C4Bank.Account") > It<RegisteredAccount>() | "produces",
        It<SynchronizeNewAccountConsumer>() > It<RegisteredAccount>() | "consumes",
        It<SynchronizeNewAccountConsumer>() > It<IAccountRepository>(),
        It<DepositoProcessingWorker>() > It<IAccountRepository>(),
    };   
}

O código anterior irá gerar o seguinte resultado:

img

Quer conhecer e colaborar com o projeto? Visite o repositório oficial do C4Sharp em https://github.com/8T4/c4sharp

Carregando publicação patrocinada...