ORIENTA?ÃO A OBJETOS NA PR?TICA
Bom dia colegas do fórum.
Nos últimos dias tenho visto vários tópicos de colegas com dúvidas sobre POO, CRUD em Net, padrões de projeto entre outras coisas.
Resolvi escrever um artigo aborando esses assuntos, inclusive com código em C# e um programa bem simples de Agenda.
Peço a todos que lerem o artigo caso achem algum erro ou algo em desacordo que envie para que eu possa fazer as devidas correções.
Abraços.
Nos últimos dias tenho visto vários tópicos de colegas com dúvidas sobre POO, CRUD em Net, padrões de projeto entre outras coisas.
Resolvi escrever um artigo aborando esses assuntos, inclusive com código em C# e um programa bem simples de Agenda.
Peço a todos que lerem o artigo caso achem algum erro ou algo em desacordo que envie para que eu possa fazer as devidas correções.
Abraços.
Colocando um Ward para lembrar de ler e comentar.
FFCOUTO,
Bati o olho e achei muito bacana.
Tem como você disponibilizar aqui no VB Mania dentro de [Ô]Artigos[Ô] e disponibilizar o código fonte também?
[][ô]s,
Tunusat.
Bati o olho e achei muito bacana.
Tem como você disponibilizar aqui no VB Mania dentro de [Ô]Artigos[Ô] e disponibilizar o código fonte também?
[][ô]s,
Tunusat.
TUNUSAT,
Já está enviado para a área de Artigos.
O código fonte está dentro do arquivo, não todo apenas os pontos principais.
Só postei aqui por ser mais rápido e o pessoal pode acompanhar, dar sugestões e tirar dúvidas.
Já está enviado para a área de Artigos.
O código fonte está dentro do arquivo, não todo apenas os pontos principais.
Só postei aqui por ser mais rápido e o pessoal pode acompanhar, dar sugestões e tirar dúvidas.
FFCOUTO,
Valew!!!
[][ô]s,
Tunusat.
Valew!!!
[][ô]s,
Tunusat.
Caramba!! Excelente artigo! é praticamente igual ao que eu faço, não cheguei a olhar todo o código, mas pelo que notei por cima, a diferença é que eu faço uma classe com os métodos de CRUD genérica que é herdada em todas as entidades, me disponibilizando os métodos diretamente na entidade, então faço reflection para buscar as decorações que descrevem os campos e tabela referente, essa parte é também quase igual o que faço, mas uso uma classe com mais campos para a decoração. Uma diferença que também notei, é que uso Lazy<T> para objetos aninhados, mas isso seria assunto para um outro artigo.
Eu faço mais ou menos assim:
Entidade:
Classe de funcionalidades:
A validação é feita no método [Ô]ValidaObjeto[Ô] onde passo a instância do objeto e também por reflection faço as validações.
O grande barato é que fiz um [Ô]gerador[Ô] de tudo isso. é um programinha que lê o banco de dados, gera todas as entidades, as classes de interação de dados, uma WebAPI, uma aplicação web, uma desktop e uma para Android tudo num pacote só. Claro, aplicações básicas, sem muito enfeite, mas todas consumindo da WebAPI. A aplicação desktop é bem simples, sem muito detalhe, já a web, é escrita toda em HTML puro, usando AngularJS, MetroUI e JQuery.
Mas novamente, parabenizo, excelente artigo e se você está usando suas aplicações aplicando tudo isso, então você está a anos luz na frente de muita gente!
Eu faço mais ou menos assim:
Entidade:
[Table(TableName = [Ô]Produto[Ô])]
public class Produto : CommonFunctions<Produto>
{
[Field(SqlType = SqlDbType.UniqueIdentifier, ShowLabel = [Ô]ID[Ô], TableFieldName = [Ô]ID[Ô], IsPrimaryKey = true)]
public Guid GUID { get; set; }
[Field(SqlType = SqlDbType.VarChar, ShowLabel = [Ô]Tipo[Ô], TableFieldName = [Ô]Tipo[Ô])]
public string Codigo { get; set; }
[Field(SqlType = SqlDbType.VarChar, ShowLabel = [Ô]Descrição[Ô], TableFieldName = [Ô]Descricao[Ô])]
public string Descricao { get; set; }
[Field(SqlType = SqlDbType.Money, ShowLabel = [Ô]Preco[Ô], TableFieldName = [Ô]Preco[Ô])]
public double Valor { get; set; }
}
Classe de funcionalidades:
public class CommonFunctions<T> where T : CommonFunctions<T>, new()
{
public static T GetObj()
{
return new T();
}
public List<String> Insert()
{
ValidaObjeto(this);
List<String> _return = null;
SqlConnection Cn = new Conexao().SqlConnection;
using (SqlCommand cmd = this.GetInsertCommand(Cn))
{
Cn.Open();
cmd.ExecuteNonQuery();
if (cmd.Parameters != null)
{
_return = new List<String>();
foreach (SqlParameter item in cmd.Parameters)
{
if (item.Direction == System.Data.ParameterDirection.Output)
{
if (item.Value == DBNull.Value)
_return.Add(null);
else
_return.Add(item.Value.ToString());
}
}
}
}
return _return;
}
public virtual SqlCommand GetInsertCommand(SqlConnection Connection)
{
SqlCommand _return = new SqlCommand();
_return.Connection = Connection;
List<PropertyInfo> properties = this.GetType().GetProperties().ToList();
List<string> fields = new List<string>();
string NomeTabela = ((Table)this.GetType().GetCustomAttributes(true)[0]).TableName;
_return.CommandText = [Ô]Insert Into {0} ({1}) Values ({2})[Ô];
foreach (PropertyInfo item in properties)
{
Field attributes = null;
if (item.GetCustomAttributes(true).ToList().Count > 0)
{
attributes = (Field)item.GetCustomAttributes(true).ToList().FirstOrDefault(a => a.GetType() == typeof(Field));
if (attributes != null)
{
if (attributes.TableFieldName != [Ô][Ô])
{
object valor = null;
valor = item.GetValue(this, null);
fields.Add(attributes.TableFieldName);
_return.Parameters.Add(new SqlParameter()
{
Value = valor,
ParameterName = attributes.TableFieldName,
SqlDbType = attributes.SqlType
});
}
}
}
}
foreach (SqlParameter par in _return.Parameters)
{
if (par.Value == null)
par.Value = DBNull.Value;
}
string campos = string.Empty;
string valores = string.Empty;
foreach (string item in fields)
{
campos += item + [Ô],[Ô];
valores += [Ô]@[Ô] + item + [Ô],[Ô];
}
campos = campos.Substring(0, campos.Length - 1);
valores = valores.Substring(0, valores.Length - 1);
_return.CommandText = string.Format(_return.CommandText, NomeTabela, campos, valores);
return _return;
}
}
A validação é feita no método [Ô]ValidaObjeto[Ô] onde passo a instância do objeto e também por reflection faço as validações.
O grande barato é que fiz um [Ô]gerador[Ô] de tudo isso. é um programinha que lê o banco de dados, gera todas as entidades, as classes de interação de dados, uma WebAPI, uma aplicação web, uma desktop e uma para Android tudo num pacote só. Claro, aplicações básicas, sem muito enfeite, mas todas consumindo da WebAPI. A aplicação desktop é bem simples, sem muito detalhe, já a web, é escrita toda em HTML puro, usando AngularJS, MetroUI e JQuery.
Mas novamente, parabenizo, excelente artigo e se você está usando suas aplicações aplicando tudo isso, então você está a anos luz na frente de muita gente!
FFCOUTO e KERPLUNK,
é possÃvel escrever um livro melhor que este:
===================================================================
Desenvolvimento em Camadas com C# .net
Camacho Jr., Carlos Olavo de Azevedo
http://www.livrariacultura.com.br/p/desenvolvimento-em-camadas-com-c-net-3235420
http://www.saraiva.com.br/desenvolvimento-em-camadas-com-c-net-2612791.html
===================================================================
é possÃvel?
Podemos colocar [Ô]sob demanda de impressão[Ô].
Exemplo:
http://www.alphagraphics.com/comunicação_e_marketing/auto-publicação/impressão_sob_demanda
[][ô]s,
Tunusat.
é possÃvel escrever um livro melhor que este:
===================================================================
Desenvolvimento em Camadas com C# .net
Camacho Jr., Carlos Olavo de Azevedo
http://www.livrariacultura.com.br/p/desenvolvimento-em-camadas-com-c-net-3235420
http://www.saraiva.com.br/desenvolvimento-em-camadas-com-c-net-2612791.html
===================================================================
é possÃvel?
Podemos colocar [Ô]sob demanda de impressão[Ô].
Exemplo:
http://www.alphagraphics.com/comunicação_e_marketing/auto-publicação/impressão_sob_demanda
[][ô]s,
Tunusat.
De fato os usuários do VBMANIA dão mais atenção ao Fórum do que à s demais áreas.
Reflection é uma das melhores coisas que o .NET nos proporciona.
Alguém já utilizou o NHibernate? Nós usávamos na empresa em que eu trabalhava e o resultado era muito bom.
Reflection é uma das melhores coisas que o .NET nos proporciona.
Alguém já utilizou o NHibernate? Nós usávamos na empresa em que eu trabalhava e o resultado era muito bom.
Essa técnica que está sendo mostrada no artigo, é muito parecida com o que o NHibernate faz.
KERPLUNK,
Fico grato por seus comentários. Esse tópico é continuação de um outro que fiz a um tempo sobre os conceitos da OOP.
Todas as minhas aplicações recentes eu tenho usado esta técnica. Facilitou muito o desenvolvimento.
O próximo passo é aprofundar mais nas WebAPI pois vou precisar disso nos sistemas da empresa aqui.
TUNUSAT,
Você está propondo que escrevamos um livro? Estou dentro, só vamos precisar de alguém com uma redação melhor, porque sou péssimo neste assunto.
Só precisar perguntar ao KERPLUNK se ele topa. Quem sabe não dá pra faturar um $$$ extra .
Fico grato por seus comentários. Esse tópico é continuação de um outro que fiz a um tempo sobre os conceitos da OOP.
Todas as minhas aplicações recentes eu tenho usado esta técnica. Facilitou muito o desenvolvimento.
O próximo passo é aprofundar mais nas WebAPI pois vou precisar disso nos sistemas da empresa aqui.
TUNUSAT,
Você está propondo que escrevamos um livro? Estou dentro, só vamos precisar de alguém com uma redação melhor, porque sou péssimo neste assunto.
Só precisar perguntar ao KERPLUNK se ele topa. Quem sabe não dá pra faturar um $$$ extra .
FFCOUTO,
A idéia é essa!
Mas não quero dinheiro... só quero mais estrelinhas no VBMania e a glória de escrever um livro ... pode ser? KKKKK!
===============================================
Como publicar um livro de Graça (custo zero) - YouTube
www.youtube.com/watch?v=mw7DW8ckzBc
===============================================
Escrever e Publicar um Livro GRATIS – 4 sites para produzir livros
http://www.vejaisso.com/escrever-e-publicar-um-livro-gratis-4-sites-para-produzir-livros/
===============================================
Confira 5 sites grátis que ensinam a criar livro digital e publicar na internet
http://ultimosegundo.ig.com.br/educacao/2014-06-03/confira-5-sites-gratis-que-ensinam-a-criar-livro-digital-e-publicar-na-internet.html
===============================================
Clube dos Autores - Dúvidas
https://clubedeautores.com.br/webpage/tour
===============================================
Como funciona o Agbook
https://agbook.com.br/webpage/tour
===============================================
Como publicar um livro sem complicações e sem gastar nada
https://gomesnaldo.wordpress.com/2010/07/22/publicar-livro-gratis-jornalismo-freelance/
===============================================
Editora Livro Rápido
http://www.livrorapido.com.br/
===============================================
Impressão de livros sob demanda
http://www.alphagraphics.com/unidades/bras%C3%ADlia-br024/livros_sob_demanda
===============================================
[][ô]s,
Tunusat.
A idéia é essa!
Mas não quero dinheiro... só quero mais estrelinhas no VBMania e a glória de escrever um livro ... pode ser? KKKKK!
===============================================
Como publicar um livro de Graça (custo zero) - YouTube
www.youtube.com/watch?v=mw7DW8ckzBc
===============================================
Escrever e Publicar um Livro GRATIS – 4 sites para produzir livros
http://www.vejaisso.com/escrever-e-publicar-um-livro-gratis-4-sites-para-produzir-livros/
===============================================
Confira 5 sites grátis que ensinam a criar livro digital e publicar na internet
http://ultimosegundo.ig.com.br/educacao/2014-06-03/confira-5-sites-gratis-que-ensinam-a-criar-livro-digital-e-publicar-na-internet.html
===============================================
Clube dos Autores - Dúvidas
https://clubedeautores.com.br/webpage/tour
===============================================
Como funciona o Agbook
https://agbook.com.br/webpage/tour
===============================================
Como publicar um livro sem complicações e sem gastar nada
https://gomesnaldo.wordpress.com/2010/07/22/publicar-livro-gratis-jornalismo-freelance/
===============================================
Editora Livro Rápido
http://www.livrorapido.com.br/
===============================================
Impressão de livros sob demanda
http://www.alphagraphics.com/unidades/bras%C3%ADlia-br024/livros_sob_demanda
===============================================
[][ô]s,
Tunusat.
Faça seu login para responder