@inaciofs/report-generator-beyond
v1.0.1
Published
Uma biblioteca de componentes para gerar relatórios (CSV, Excel) usando a arquitetura Beyond.
Maintainers
Readme
A arquitetura de componentes "Beyond" que foi aplicada no código TypeScript utiliza vários princípios SOLID. Aqui estão três dos mais evidentes:
Princípio da Responsabilidade Única (SRP - Single Responsibility Principle)
O que é: Uma classe deve ter apenas um motivo para mudar, ou seja, deve ter uma única responsabilidade. Aplicação: Este princípio é aplicado de forma rigorosa em toda a estrutura. A classe WriterElementInternal tem a única responsabilidade de interagir com as bibliotecas de arquivos para escrever dados em formato CSV ou Excel. Ela não sabe o porquê nem quando é chamada. A classe ReportElementInternal tem a única responsabilidade de orquestrar a geração do relatório, decidindo qual método de escrita (writeCsv ou writeExcel) chamar com base nas opções recebidas. Ela não sabe como os arquivos são escritos. As classes ...ConcreteComponentInterface (ex: ReportConcreteComponentInterface) têm a responsabilidade exclusiva de construir e montar seus respectivos componentes, inicializando portas e elementos internos. Princípio da Inversão de Dependência (DIP - Dependency Inversion Principle)
O que é: Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações. Aplicação: Este é um dos pilares da arquitetura. O ReportComponent (módulo de alto nível) não depende diretamente do WriterComponent (módulo de baixo nível). Em vez disso, o ReportComponent, através de seu ReportElementInternal, depende da abstração IWriterRequired (uma interface). O WriterComponent fornece uma implementação concreta que satisfaz essa abstração. A conexão (ou "injeção de dependência") entre os dois componentes é feita externamente, no arquivo SistemaExterno.ts, que inverte o controle. Princípio da Segregação de Interfaces (ISP - Interface Segregation Principle)
O que é: Nenhum cliente deve ser forçado a depender de métodos que não utiliza. É melhor ter muitas interfaces específicas do que uma única interface geral. Aplicação: As interfaces criadas são pequenas e focadas nas necessidades de quem as consome. A interface IReportProvided possui apenas um método, generateReport, que é exatamente o que o SistemaExterno precisa para interagir com o componente de relatório. A interface IWriterRequired define apenas os métodos de escrita (writeCsv, writeExcel) que o ReportElementInternal necessita, nada mais. Se houvesse outros métodos no WriterComponent não relacionados à escrita, eles não estariam nesta interface, evitando que o ReportComponent dependesse de funcionalidades que não usa.
