ORIENTACAO A OBJETOS - CONCEITO
Citação:FFCOUTO: Puristas de OOP, dirão que você deve criar um singleton para isso, eu pessoalmente prefiro classes estáticas normal apesar de quase não usar dessa maneira.
Kerplunk, o exemplo seria essa sua maneira de usar. Criar a singleton ou a classe estática eu sei como fazer.
Citação::
FFCOUTO: Puristas de OOP, dirão que você deve criar um singleton para isso, eu pessoalmente prefiro classes estáticas normal apesar de quase não usar dessa maneira.
Kerplunk, o exemplo seria essa sua maneira de usar. Criar a singleton ou a classe estática eu sei como fazer.
Bom, daà depende. Em que você quer aplicar?
Citação::
Kerplunk, o uso será feito num programa simples. Ele tem um pequeno arquivo de configuração, onde fica as escolhas do usuário, porém toda a funcionalidade depende da leitura desses valores.
Crie a classe e use serialização.
O caso do modelo para as configurações, muitas vezes alguns dados das configurações de um aplicativo são baseados em classes estáticas, enquanto outros são tipos convencionais. Ainda, na carga inicial de um aplicativo, normalmente é quando se [Ô]carregam[Ô] as configurações, que conter desde dados do cliente/usuário até testes com serviços (dados, atualizações, webservices etc.). Normalmente usamos paralelismo nesses processos, para que o usuário se mantenha informado do que o aplicativo está fazendo. Nesse aspecto da carga das configurações (e outros), também penso que para a adoção de singleton seja necessário pesar bem o risco de chamadas recursivas. Um bom exemplo é o caso da MembershipProvider para MS-Access (usando OleDB), demonstrada pela Microsoft há alguns anos (2006) no MSDN. Ao [Ô]acumular[Ô] ações, por não efetuar uma descarga mais rápida do buffer, gerava facilmente um erro de sobrecarga em tempo de execução.
Aproveitando, sobre paralelismo (PLINK, TPL etc.) pouco se fala, e é um assunto sempre importante ao desenvolvedor, principalmente com o uso de OOP...
Para tipo entidades, correspondentes à tabelas ou outros dados, esses não uso singletons, mas uma classe factory para conexão de banco de dados por exemplo, aà sim, uso singleton. Nas entidades de dados, uso eventos para [Ô]informar para fora[Ô] o que está acontecendo e geralmente uso delegates para rodar métodos mais pesados(que também disparam eventos). Assim, posso executar métodos pesados até mesmo em uma thread paralela. Mas nem tudo eu faço isso, fazer classes thread safe, não é tão simples e exceções nem sempre muito fáceis de depurar, além do problema do paralelismo e concorrência.
Contudo, vou deixar registrado, que consegui fazer o uso das classes estáticas para a questão das opções do programa, serviu bem para o meu propósito. E que finalmente consegui entender o exemplo que o Kerplunk postou no inÃcio do tópico usando Reflection para montar os comandos de CRUD. No exemplo tinha apenas o comando Insert, mas conseguir fazer aqui Update, Delete e Select numa boa. E vou confessar, é a 8ª maravilha do mundo .
Acho que podemos passar para o próximo assunto dos tópicos (página 4) que você mesmo sugeriu.
Citação::
Caros, Kerplunk e Professor, não vou entrar nesse assunto que vocês estão discutindo pois ainda é um mundo novo pra mim a OOP.
Contudo, vou deixar registrado, que consegui fazer o uso das classes estáticas para a questão das opções do programa, serviu bem para o meu propósito. E que finalmente consegui entender o exemplo que o Kerplunk postou no inÃcio do tópico usando Reflection para montar os comandos de CRUD. No exemplo tinha apenas o comando Insert, mas conseguir fazer aqui Update, Delete e Select numa boa. E vou confessar, é a 8ª maravilha do mundo .
Acho que podemos passar para o próximo assunto dos tópicos (página 4) que você mesmo sugeriu.
Assim que eu tiver um tempinho, prometo que escrevo mais...
Agora me surgiu uma dúvida em relação aquele exemplo que você postou. Nele você informa os atributos para as propriedades e utiliza o reflection para recuperar os nomes de campos e valores, minha dúvida é: E quando a propriedade for outra classe (entidade) como fazer?
Por exemplo, tenho uma classe Pedido e nela a propriedade Cliente não é do tipo inteiro e sim uma classe Cliente. Como fazer para que a classe extendida capture a propriedade Código de cliente e monta o comando SQL corretamente?
[Table(TableName=[Ô]pedidos[Ô])]
class Pedido
{
[Field(TableFieldName=[Ô]numero[Ô], DatabaseType=SqlDbType.Int)]
public int Numero { get; set; }
[Field(TableFieldName=[Ô]id_cliente[Ô], DatabaseType=SqlDbType.Int)]
public Cliente Cliente { get; set; }
....
}
Espero que tenha entendido a minha dúvida. E obrigado pela ajuda.