Salve !
Estou projetando um sistema e me veio uma dúvida:
Tenho uma entidade Produto que representa obviamente o objeto Produto dentro do sistema. Para cada produto, poderei ter várias fotos do mesmo.
Inicialmente eu pensei em composição: ProdutoFotos (a possível entidade das fotos) é composta do Produto.
[quote=“Tentativa de diagrama UML em texto”]Produto<>------ProdutoFoto
<>---- simbolo de composição X)[/quote]
A responsabilidade de cada foto do produto seria do ProdutoFoto, e o controle sobre ProdutoFoto seria do Produto, obviamente.
Pensando um pouco mais, acho que uma solução bem mais simples, seria um vetor fotos dentro da entidade Produto mesmo.
Penso que ambas soluções seriam válidas, mas acho que a primeira - do ProdutoFotos - seria mais interessante caso eu tivesse mais coisas a gerenciar da foto, como data de adição, adicionado por quem e etc. Porém, estou pensando em adotar a solução do vetor mesmo.
O que acham ? Minha idéia está correta ou vocês vêem que isso pode não ser uma boa prática OO ?
É uma questão de análise. Pra que desperdiçar funcionalidades se a empresa não precisa de controle sobre uma foto.
Imagine num mundo real onde vc ganha R$ 30,00 a hora. E me diz que vai gastar 8 horas criando a tal da Foto e suas implementações onde o que eu te pedi foi controle sobre o produto apenas.
Evitar desperdício é uma boa prática da Visão Ágil.
[quote=Giulliano]É uma questão de análise. Pra que desperdiçar funcionalidades se a empresa não precisa de controle sobre uma foto.
Imagine num mundo real onde vc ganha R$ 30,00 a hora. E me diz que vai gastar 8 horas criando a tal da Foto e suas implementações onde o que eu te pedi foi controle sobre o produto apenas.
Evitar desperdício é uma boa prática da Visão Ágil.[/quote]
Pois é. É o renomado “matar mosca com um canhão”. Este é um dos motivos pelo qual postei. Porque uma vez que apenas irei controlar o path das fotos do produto, penso em algo simples, porém, viso também a reutilização, legibilidade e as boas práticas OO - a qual estou estudando X)
[quote=“cmoscoso”]+1
List<Foto> fotos;[/quote]
Ao que entendi, vocês sugerem que na entidade Produto, haja o ArrayList das fotos, pois é uma composição do Produto (as fotos). Assim sendo, toda a responsabilidade de manipular as Foto(s) ficará a cargo da entidade Produto, correto ?
Por exemplo:
Ele irá correr o ArrayList produtos e irá verificar se bate o path, com o path que quero remover:
public void removeFoto(String caminho) {
while...
if(obj_fotoInteracaoAtual.matchesUrl(caminho)) {
//remove do ArrayList o tal objeto foto
}
}
Do ponto de vista da reutilização, isso não seria ruim ? Pois se eu for reutilizar o Foto para outro fim, terei que montar sua implementação novamente (não em sua totalidade, pois pontos poderão mudar) mas em termos gerais serão duplicado sim.
Sobre a classe Foto: de a ela um comportamento definido e não fique pensando demais no futuro: quando chegar a hora de refatorar: refatore. Só lembre-se de investir em uma suite de testes automatizados/ integração continua, etc
quote=peczenyj
Sobre a classe Foto: de a ela um comportamento definido e não fique pensando demais no futuro: quando chegar a hora de refatorar: refatore.[/quote]
Então no caso, seria fornecer a ela o comportamento especifico para a foto do produto. Se eu precisar de mais tipo de fotos ao longo do projeto (depois em outras fases, pois por hora não preciso) eu volto e refatoro, certo ?