Alexandre, minha opinião também visa produtividade, mas como não
contextualizei acho que não ficou 100% clara.
Esse cenário de manter apenas o código do "enum" no DB é válido quando
usando NHibernate. Se tivermos essa tabela separada ao invés de fazer:
from C in session.Linq<Cliente>
where c.TipoCliente == EnumTipoCliente.VIP
Teriamos que pegar uma instância da classe TipoCliente (já que ela é
uma entidade em outra tabela) e usar pra comparar na query ou sei lá
onde. Dessa forma a consulta ficaria mais lenta (porque teriamos que
buscar mais um cara no banco) e mais chata de fazer.
Como o NH seta o enum na classe quando ele está carregando, fica 100x
mais fácil fazer usando só o enum sem manter a tabela de domínio (com
as descrições no banco).
Att.,
Tuca
On Jun 29, 8:50 am, Alexandre Valente <
alexandre.g.vale...@gmail.com>
wrote:
>
agvalente.wordpress.comwww.whitefox.com.br<
http://www.whitefox.com.br%20/>
>
> 2010/6/29 Vinicius Quaiato <
vinicius.quai...@gmail.com>
>
> > Na vdd o Valente está intimado a comparecer em TODOS os núcleos do DNA pelo
> > Brasil pra mostrar esse framework da WhiteFox.
>
> > Pow, pra todas as situações o framework tem soluções, hehehehe. Isso sim é
> > que é previsibilidade, adaptabilidade, reúso, manutenabilidade, e todas
> > "ades" que podemos ter \o/
>
> > E aí Valente, quando e por onde começa o tour?!
>
> > *Vinicius Quaiato*
> >
http://viniciusquaiato.com
>
> > My profiles: Twitter <
http://twitter.com/vquaiato>
> > Contact me: [image: Google Talk/]vinicius.quaiato
>
> > 2010/6/29 Alexandre Valente <
alexandre.g.vale...@gmail.com>
>
> >> Oi Juan
>
> >> Então, como falei, é possível, mas com aumento de complexidade. O problema
> >> de HQL é que vc teria que gerar um DTO para cada resultado que no final das
> >> contas seria serializado em XML para processamento do XSLT. E lembrando que
> >> o LINQ do hibernate ainda não é bom o suficiente para vc lidar com queries
> >> complexas, então vc teria que escrever o HQL em string mesmo. E não sendo
> >> tipado, vc acaba com um monte de strings em código que são mais difíceis de
> >> manter do que no proprio banco. E na parte de enums então, trabalhar com HQL
> >> é bem complicado pois o HQL trata a enum como int aí vc teria que ter um
> >> tipo de mapeamento para achar as descrições. Ou seja, possível, mas muito
> >> mais complexo! :-)
>
> >> Qdo vc quiser, só marcar um chopp. Estamos ali no downtown agora, pq vc
> >> não marca uma visita pra conhecer um dia destes?
>
> >> abs,
>
> >> Alexandre Valente
> >> MCSE+I, MCSD, MDCBA, ITIL, CSM
> >>
agvalente.wordpress.com
> >>
www.whitefox.com.br<
http://www.whitefox.com.br%20/>
>
> >> 2010/6/29 Juan Pedro A. Lopes <
juanplo...@gmail.com>
>
> >>> Se o seu problema são só os joins, o Linq to HQL faz isso com maestria.
> >>> Aliás, HQL e Criteria já fazem isso com maestria há algum tempo.
>
> >>> Alexandre, infelizmente eu não pude ir no encontro onde você mostrou o
> >>> framework da WhiteFox, mas eu ainda estou bastante curioso com relação a
> >>> ele. De verdade. :)
>
> >>> 2010/6/29 Alexandre Valente <
alexandre.g.vale...@gmail.com>
>
> >>>> Não precisa ser SQL gigante Juan. Imagina uma aplicação que controla
> >>>> contratos p. ex., Para vc ver uma lista de contratos com filtros, vc tem
> >>>> contratos join cliente, join endereço, join fornecedor, join nota fiscal,
> >>>> left join cancelamento etc... Agora imagina isto com milhares de
> >>>> registros... Isto se aplica a qualquer sistema cujo domino seja minimamente
> >>>> grande.
>
> >>>> Como falei, claro que dá pra fazer isto via aplicação ou via OO, mas é
> >>>> muito mais complexo e provavelmente muito menos performático. E em termos de
> >>>> produtividade é muito dificil bater uma Filtro de Domínio -> Restrições em
> >>>> SQL simples (view ou SP) -> XML -> XSLT -> Html..... Eu sei que muita gente
> >>>> acha que isto não é puro OO ou que fere uma religião ou outra.... Mas o dia
> >>>> em que algo gerar esta mesma produtividade, pode ter certeza que vamos
> >>>> considerar! :-).
>
> >>>> abs,
>
> >>>> Alexandre Valente
> >>>> MCSE+I, MCSD, MDCBA, ITIL, CSM
> >>>>
agvalente.wordpress.com
> >>>>
www.whitefox.com.br<
http://www.whitefox.com.br%20/>
>
> >>>> 2010/6/29 Juan Pedro A. Lopes <
juanplo...@gmail.com>
>
> >>>>> Se a sua tela é resultado de uma SQL gigante, você sempre pode deixar
> >>>>> a sua aplicação fazer essa SQL. Ou melhor, usar uma (materialized) view --
> >>>>> acho muito mais elegante. Mas ainda acredito que SQLs gigantes são correções
> >>>>> de última hora em erros de modelagem.
>
> >>>>> Aliás, faz algum tempo que tenho tentado substituir (com sucesso) toda
> >>>>> busca complexa não-crítica dos sistemas por full-text search com o Lucene. É
> >>>>> muito mais prático tanto do ponto de vista do programador quanto do usuário.
>
> >>>>> 2010/6/29 Alexandre Valente <
alexandre.g.vale...@gmail.com>
>
> >>>>> Bom, a minha opinião é conhecida. Eu não vou sacrificar produtividade
> >>>>>> simplesmente para fazer algo que teoricamente faria mais sentido. Pega uma
> >>>>>> tela simples de consulta, onde vc retorna uma lista que que é o resultado de
> >>>>>> um join de 10 ou mais tabelas. Fazer isto OO é muito pesado, possível, mas
> >>>>>> pesado (mais difícil de fazer, mais oneroso em termos de recursos
> >>>>>> computacionais). Fazer isto usando uma "FOR XML" em uma lista ou SP do Sql
> >>>>>> Server é ultra trivial. Então neste caso (que nem é uma tela tão complexa
> >>>>>> assim, uma lista com filtros p. ex.), faz todo sentido deixar parte deste
> >>>>>> processamento no banco.
>
> >>>>>> Claro que é tudo aquilo que já falamos em outras threads, isto depende
> >>>>>> do cenário, da equipe da aplicação etc. etc.... Nos nossos sistemas, a gente
> >>>>>> consegue fazer por completo qualquer lista paginada com vários joins, com
> >>>>>> vários filtros em minutos (poucos!).... E são telas que vão ter pouquissimas
> >>>>>> linhas de código, ou seja, fácil de fazer, fácil de manter, baixo impacto em
> >>>>>> performance.... É muito difiícil ir contra um cenário destes, ainda que
> >>>>>> (heresia das heresias!) a gente esteja usando o banco como apoio! :-).
>
> >>>>>> abs,
>
> >>>>>> Alexandre Valente
> >>>>>> MCSE+I, MCSD, MDCBA, ITIL, CSM
> >>>>>>
agvalente.wordpress.com
> >>>>>>
www.whitefox.com.br<
http://www.whitefox.com.br%20/>
>
> >>>>>> 2010/6/28 Juan Pedro A. Lopes <
juanplo...@gmail.com>
>
> >>>>>>> Defina "tela de consulta mais avançada".
>
> >>>>>>> Eu sou da opinião que só quem acessa o banco é a aplicação. Qualquer
> >>>>>>> comunicação deve ser feita por interfaces comuns (de preferência REST). Se
> >>>>>>> você precisa colocar um enum no banco só para fazer uma query "where
> >>>>>>> t.description = 'Available", algo está errado na sua modelagem.
>
> >>>>>>> 2010/6/28 Alexandre Valente <
alexandre.g.vale...@gmail.com>
>
> >>>>>>>> Oi Tuca,
>
> >>>>>>>> Na teoria sim. Na prática, fica pouco produtivo. Extrações p. ex.
> >>>>>>>> acontecem em qualquer sistema. Se por causa de um purismo vc não colocar
> >>>>>>>> isto em banco, vc vai ter uma complexidade adicional em qualquer extração ou
> >>>>>>>> tela de consulta mais avançada. Na minha opinião, este é um caso onde mais
> >>>>>>>> do que vale dar uma "entortada" nesta separação teórica, os ganhos em
> >>>>>>>> produtividade justificam em curto prazo.
>
> >>>>>>>> abs,
>
> >>>>>>>> Alexandre Valente
> >>>>>>>> MCSE+I, MCSD, MDCBA, ITIL, CSM
> >>>>>>>>
agvalente.wordpress.com
> >>>>>>>> Banco de dados, ainda mais em uma aplicação LOB é pra guardar dados.
> >>>>>>>>> Código no banco FTW. Se for usar num cubo, estes dados irão passar
> >>>>>>>>> por
> >>>>>>>>> algum tipo de ETL e ai você faria essa "Transformação".
>
> >>>>>>>>> Cada gato no seu cesto.
>
> >>>>>>>>> On Jun 28, 4:00 pm, Pedro Reys <
pedror...@gmail.com> wrote:
> >>>>>>>>> > Daniel,
>
> >>>>>>>>> > Normalmente criamos uma classe base abstrata Enumeration [1], e
> >>>>>>>>> então sempre
> >>>>>>>>> > que precisamos criar um "enum" criamos uma implementação desta
> >>>>>>>>> classe [2].
> >>>>>>>>> > Normalmente deixamos a base de dados agnóstica com relação a
> >>>>>>>>> essas
> >>>>>>>>> > Enumerations, como você sugeriu. Mais, em um projeto específico,
> >>>>>>>>> precisamos
> >>>>>>>>> > criar no banco as tabelas refereentes as Enumerations, por um
> >>>>>>>>> motivo similar
> >>>>>>>>> > ao seu. O que fizemos foi, em nosso script de build, quando era
> >>>>>>>>> pra fazer
> >>>>>>>>> > deploy pra produção, estas tabelas e o relacionamentos eram
> >>>>>>>>> criados.
>
> >>>>>>>>> > 1 -
http://bit.ly/c7A1LM
> >>>>>>>>> > 2 -
http://bit.ly/dhL0nx<
> >>>>>>>>> > - Pedro Reys
>
> >>>>>>>>> > 2010/6/28 Alexandre Valente <
alexandre.g.vale...@gmail.com>
>
> >>>>>>>>> > > Oi Daniel,
>
> >>>>>>>>> > > No nosso caso fazemos exatamente isto. Tratamos no domíno como
> >>>>>>>>> enum e
> >>>>>>>>> > > criamos uma tabela no banco pra
>
> ...
>
> read more »