public void Compartilhar(Compartilhamento compartilhamento)
        {
            new Contract <Postagem>()
            .IsNotNull(compartilhamento, nameof(compartilhamento), "Não foi informado nenhum compartilhamento para essa postagem.")
            .EnsureContractIsValid();

            CriticarSeAcaoFoiRealizadaPeloAutor(compartilhamento.UsuarioId, "O autor da postagem não pode compartilhar sua própria postagem.");

            _compartilhamentos.Add(compartilhamento);
        }
        public void Descompartilhar(Guid compartilhamentoId, Guid usuarioId)
        {
            Compartilhamento compartilhamentoQueSeraRemovido = _compartilhamentos.FirstOrDefault(c => c.Id == compartilhamentoId);

            new Contract <Postagem>()
            .IsNotNull(compartilhamentoQueSeraRemovido, nameof(compartilhamentoQueSeraRemovido), "O compartilhamento informado não existe.")
            .EnsureContractIsValid()
            .AreEquals(compartilhamentoQueSeraRemovido.UsuarioId,
                       usuarioId,
                       nameof(usuarioId),
                       "O compartilhamento apenas pode ser descompartilhado pelo usuário que o realizou.")
            .EnsureContractIsValid <Postagem, DomainInvalidOperationException>();

            _compartilhamentos.Remove(compartilhamentoQueSeraRemovido);
        }