C4Sharp : diagramação de modelos C4 através da linguagem C#
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:
Quer conhecer e colaborar com o projeto? Visite o repositório oficial do C4Sharp em https://github.com/8T4/c4sharp