DESAFIO II - REFATORA?ÃO [OFF]
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.
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
Sinceramente, não entendi
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!
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!
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
Citação:Sinceramente, não entendi
O que tem que fazer é apenas refatorar o código para deixa-lo mais manutenÃvel.
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.
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.
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.
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