DESAFIO II - REFATORA?ÃO [OFF]

JABA 19/03/2016 17:59:47
#459500
No primeiro desafio que foi lançado no fórum, a proposta era verificar como andava a lógica de vocês. Agora a ideia é verificar a qualidade de seus códigos. Para isso, deixo um código que está aparentemente usando os principios da OOP, mas que foge alguns bons conceitos e por isso precisa de melhorias. O que vocês tem que fazer é refatorar esse código deixando-o da forma que consideram ser um código de alta qualidade. A única restrição é que a lógica de negócio deve permanecer a mesma; ou seja, imprimir a conta do cliente e gerar as devidas bonificações. Fora isso, vocês podem mudar ou acrescentar o que for preciso, como nome de variáveis, métodos, classes, projeto, etc.

OBS; O código hoje só imprime num único formato, mas não se esqueça que futuramente o cliente pode pedir para imprimir em outros formatos, como PDF, por exemplo. Coloquei o projeto com esse código em anexo para vocês baixarem e fazerem as devidas mudanças. Quando for a hora, eu posto a minha versão do código.

Public Class Cliente

Sub New(Nome As String)
_Nome = Nome
_Locacoes = New List(Of Locacao)
End Sub

Property Nome As String
Property Locacoes As List(Of Locacao)

Public Sub AdicionarLocacao(Locacao As Locacao)
_Locacoes.Add(Locacao)
End Sub

Public Function Conta() As String
Dim quantiaTotal As Double = 0
Dim pontosLocadorFrequente As Integer = 0
Dim resultado As String = [Ô]Registro de Locação de [Ô] & Nome & vbNewLine

For Each Locacao As Locacao In Locacoes
Dim estaQuantia As Double = 0

Select Case (Locacao.Filme.CodigoPreco)
Case Filme.NORMAL
estaQuantia = estaQuantia + 2
If (Locacao.DiasAlugados > 2) Then
estaQuantia = estaQuantia + (Locacao.DiasAlugados - 2) * 1.5
End If

Case Filme.LANCAMENTO_NOVO
estaQuantia = estaQuantia + Locacao.DiasAlugados * 3
Case Filme.INFANTIL
estaQuantia = estaQuantia + 1.5
If (Locacao.DiasAlugados > 3) Then
estaQuantia = estaQuantia + (Locacao.DiasAlugados - 3) * 1.5
End If
End Select

pontosLocadorFrequente = pontosLocadorFrequente + 1

If ((Locacao.Filme.CodigoPreco = Filme.LANCAMENTO_NOVO) AndAlso Locacao.DiasAlugados > 1) Then
pontosLocadorFrequente = pontosLocadorFrequente + 1
End If

resultado = resultado & vbTab & Locacao.Filme.Titulo & vbTab & estaQuantia & vbNewLine
quantiaTotal = quantiaTotal + estaQuantia

Next
[ô]rodapé
resultado = resultado & [Ô]O valor devido é [Ô] & quantiaTotal & vbNewLine & [Ô]Você ganhou [Ô] & pontosLocadorFrequente & [Ô]pontos de Locador Frequente[Ô]
Return resultado

End Function

End Class



Public Class Locacao

Sub New(Filme As Filme, DiasAlugados As Integer)
_Filme = Filme
_DiasAlugados = DiasAlugados
End Sub

Property Filme As Filme
Property DiasAlugados As Integer

End Class



Public Class Filme

Public Const INFANTIL = 2
Public Const NORMAL = 0
Public Const LANCAMENTO_NOVO = 1

Sub New(Titulo As String, CodigoPreco As Integer)
_titulo = Titulo
_codigoPreco = CodigoPreco
End Sub

Property CodigoPreco As Integer
Property Titulo As String

End Class



Public Class Form1

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim cliente As New Cliente([Ô]Jaba[Ô])
Imprimir(cliente)
End Sub

Public Sub Imprimir(Cliente As Cliente)
MsgBox(Cliente.Conta())
End Sub
End Class

KERPLUNK 20/03/2016 02:52:02
#459512
Sinceramente, não entendi
DS2T 20/03/2016 04:01:30
#459514
Resposta escolhida
To achando que corre o risco de eu vencer por W.O... hahahaha Pessoal do fórum é muito desanimado...
Mas eu, como sou um cara extremamente competitivo, modifiquei algumas coisas e vou colocar aqui hahaha
Obviamente, se fosse um projeto maior, eu teria feito diferente... mas para os requisitos mencionados, isso atende... e o código ficou bem simples de entender.

Vai rolar nota? hahaha
Tente pegar leve aí com os [Ô]X[Ô] hahaha

Abraços!
JABA 03/04/2016 19:47:08
#460371
Cara, mil desculpas. Eu tava tão atarefado que nem olhei ainda o seu projeto. Hoje quando eu chegar em casa, vou ver como ficou. Só tomara que eu não tome um susto hein. kkkkkkkk
JABA 03/04/2016 19:52:33
#460372
Citação:

Sinceramente, não entendi



O que tem que fazer é apenas refatorar o código para deixa-lo mais manutenível.
JABA 08/04/2016 20:40:09
#460783
Caro DS2T, dei uma olhada no seu código e achei muito bom. Como sempre, sempre me impressionando. Parabéns mesmo!
Como foi prometido, postarei o meu código com algumas poucas mudanças para a sua versão. Qualquer crítica será bem vinda.

OBS: Ô camarada pra gostar tanto de Titanic hein kkkkk.

Obrigado.
DS2T 19/04/2016 18:23:31
#461136
Hahahaha fui criado vendo Titanic e Lagoa Azul né cara...

Sobre seu código, ficou bem bacana.
Gostei do que fiz na parte da impressão, deixou menos amarrado. Bem bacana.
Tópico encerrado , respostas não são mais permitidas