📘 Resumo do Sistema de Assinaturas (Capítulo 11.9)
Esse tópico mostra como modelar um sistema de assinaturas mensais usando Java 8, representando o tempo de vigência da assinatura e o cálculo do valor total pago.
Modelagem da classe Subscription:
- Utiliza Optional para a data de término, tornando explícito o tratamento de assinaturas ativas/encerradas
- Dois construtores: um para assinaturas ativas (sem data de término) e outro para assinaturas encerradas
- Método getTotalPaid() que calcula automaticamente o valor total pago
Cálculo de duração:
- Uso de ChronoUnit.MONTHS.between() para calcular meses entre datas
- Utilização inteligente de Optional.orElse() para tratar assinaturas ativas (usando data atual)
Operações com streams:
- Cálculo do total pago por todas as assinaturas com map e reduce
- Filtragem de assinaturas ativas com filter(sub -> sub.getEnd().isEmpty())
- Cálculo de estatísticas como valor médio por assinatura
Vantagens do design:
- Código limpo sem verificações de null
- Lógica de negócio encapsulada na classe Subscription
- Flexibilidade para diferentes tipos de consultas e relatórios
Exemplos práticos:
- Cálculo individual por assinatura
- Agregação de valores totais
- Filtros e estatísticas sobre a coleção de assinaturas
Esta implementação demonstra como usar recursos modernos do Java (Optional, Streams, Date/Time API) para modelar um sistema de assinaturas de forma elegante e eficiente.
Ver exemplo: SubscriptionSystem.java
Top comments (0)