ORIENTA?ÃO A OBJETOS NA PR?TICA

FFCOUTO 17/07/2015 10:25:54
#448971
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.
ASHKATCHUP 17/07/2015 10:43:43
#448974
Colocando um Ward para lembrar de ler e comentar.
TUNUSAT 17/07/2015 10:47:36
#448976
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.
FFCOUTO 17/07/2015 11:12:59
#448978
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.
TUNUSAT 17/07/2015 13:00:55
#448985
FFCOUTO,

Valew!!!

[][ô]s,
Tunusat.
KERPLUNK 17/07/2015 14:11:58
#448994
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:

[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!
TUNUSAT 17/07/2015 14:23:27
#448997
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.
ASHKATCHUP 17/07/2015 14:46:23
#448998
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.
KERPLUNK 17/07/2015 15:39:12
#449001
Essa técnica que está sendo mostrada no artigo, é muito parecida com o que o NHibernate faz.
FFCOUTO 17/07/2015 15:53:07
#449002
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 .
TUNUSAT 17/07/2015 17:05:46
#449003
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.
Página 1 de 3 [23 registro(s)]
Faça seu login para responder