DEV Community

FUNDAMENTOS JAVA
FUNDAMENTOS JAVA

Posted on • Edited on

11.9 Sistema de assinaturas

📘 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)