segunda-feira, 21 de dezembro de 2009
Model View Controller - MVC
O Model-View-Controller, padrão de arquitectura adoptado pelo ASP.NET MVC não é novo. Pelo contrário, existe, pelo menos, desde a década de 70.
Essencialmente, este padrão está assente no conceito de separação em camadas. Com responsabilidades claras para cada componente. O Model representa a camada de dados, o View, a camada de apresentação(UI) e o Controller, a camada de negócio. Este último, pode ser comparado em parte, ao ‘Code Behind’ do ASP.NET Web Forms uma vez que, gere e responde aos inputs do utilizador.
Tem como diferencial, também, o facto de não utilizar View State e nem Web Forms.
Dos benefícios do ASP.NET MVC, eu gosto particularmente de dois:
URLs ‘roteáveis’ (amigáveis)
Uma vez mais, no ASP.NET Web Forms as URLs ‘apontam’ para ficheiros localizados no disco rígido do Web Server.
Por exemplo:
http://www.agap2.pt/home.aspx pode corresponder a x:\webroot\home.aspx
No ASP.NET MVC não é assim. URLs não esperam nenhuma correspondência com ficheiros sobre o Web Server. Elas são manipuladas no Controller.
O desenho de uma URL routing pode se parecer como isso:
http://www.agap2.pt/rdc { controller = “Competencia”, action= “Rdc” }
TDD - Test-Driven Development
Uma abordagem na qual criamos uma unidade de teste e, então, escrevemos código para satisfazer o teste.
A unidade de teste deve representar o comportamento esperado do código que está a ser escrito.
É importante destacar que, neste momento, o ASP.NET MVC não é o substituto do ASP.NET Web Forms mas, sim, uma alternativa.
Fica aqui, então, a sugestão para que todos dêem uma espreitadela mais atenta nisto.
Um abraço e um Feliz Natal!
*Equipa do Portal Agap2
André Oliveira; Joana Paes; Marco Delgado; Michael Castro; Ricardo Peixeiro; Ricardo Pereira; Rui Raimundo; Vitor Catarino; Vitor Sezefredo.
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
terça-feira, 7 de julho de 2009
Um exemplo do que não se deve fazer . . .
no cliente tiram-me o tempo.
Desta vez, deparei-me com algo, que achei que tinha mesmo de ser partilhado convosco.
Encontrei uma função Javascript, que é incluída numa página com um código no mínimo curioso, apreciem:
function insertDoc(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, Quantidade, sysDate, allow) {
var xml, msql, QantFix, incDate;
var doc, docAttr, docChilds, nor;
debugger;
incDate = ShortDt;
QantFix = Quantidade;
if (allow == "A")
QantFix = calculaQuantidadeACT(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, parseInt(Quantidade), sysDate, allow);
while (incDate <= sysDate)
{
msql = "declare @Centro as char(3); declare @estrutura as char(2); declare @area as char(2); declare @produto as char(2); declare @operacao as char(2); declare @TipoRegisto as char(30); declare @userid as char(8); declare @quantidade as int; declare @allow as char(1); " +
"select @Centro='" + Centro + "'; select @estrutura=" + Estrutura + "; select @area=" + Area + "; select @produto=" + Produto + "; select @operacao=" + Operacao + "; select @TipoRegisto='" + TipoRegisto + "'; select @userid='" + User + "'; select @quantidade=" + Quantidade + "; select @allow='" + allow + "'; " +
"declare @DTPD as datetime; declare @DT as datetime; select @DTPD='" + ShortDt + "'; select @DT='" + incDate + "'; declare @RecebidosD as int; declare @PendentesD as int; declare @PendentesDA as int; ";
if (ShortDt == incDate) {
msql = msql + "" +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); " +
"if (@RecebidosD is null) begin " +
"insert into tregisto (centro, estrutura, area, produto, operacao, tiporegisto, data, userid, quantidade) " +
"values (@Centro, @estrutura , @area, @produto, @operacao, @TipoRegisto, @DT, @userid, @quantidade); " +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); "
.... (Omitido o resto por questões de brevidade)
}
Temos aqui um caso clássico de utilização de SQL client side, e disponível na página . . .
Algo a evitar!
terça-feira, 23 de dezembro de 2008
Parallelization is next performance horizon
sexta-feira, 28 de novembro de 2008
Cábulas de .Net (e não só)
Caros colegas, quantas vezes a nossa produtividade se resume à (rápida) acessibilidade da informação?
Várias vezes dou por mim à procura, pela centésima vigésima primeira vez, daquele help porreiro de JavaScript, ou, a dizer: “onde é que eu tenho aquele snippet para escrever o raio de um DOCTYPE de xhtml…será que está na pen ou no computador de casa…”
Isto é típico das matérias que não usamos todos os dias, mas só dia-sim, dia-não :-).
Por isso achei um espectáculo encontrar um post que faz um apanhado de várias “cheat sheets”, de várias tecnologias, a maioria, prontas a imprimir numa folha A4, ou ver no Acrobat:
http://john-sheehan.com/blog/index.php/net-cheat-sheets/
É claro que as cábulas só interessam a quem sabe mais do que aquilo que elas tiverem, resultado da elevada compressão (com perdas) da informação constante :-)
terça-feira, 25 de novembro de 2008
A Arquitectura Aplicacional — Análise de Características
[Este é o segundo artigo da série “A Arquitectura Aplicacional” I) Introdução III) Factores de Sobrevivência]
Depois de tão aplaudida estreia não tenho outro remédio senão continuar a série de artigos sobre a “A Arquitectura Aplicacional”. Agradeço, desde já, os hipotéticos futuros aplausos.
Hoje, ao ler (mais que tardiamente) o artigo do Joaquim Ferreira abriu-se-me o apetite para a escrita!
Tal como prometi no último artigo, vamos baixar a altitude. Colegas consultores: peço-vos que desabotoem os punhos das camisas e arregacem as mangas, pois vamos sujar um pouco as mãos [isto do consultor de colarinho branco e botões de punho não joga, nmho, muito bem com a programação, e com o trabalho em particular, também].
No último artigo concluímos que não existe uma só arquitectura aplicacional que seja adequada para servir todos os sistemas. Mas que, por outro lado, existem características de uma arquitectura que nos permitem classificar e escolher de entre as infinitas arquitecturas existentes. Que características são essas? As seguintes características são positivas:
- simplicidade — a arquitectura é o mais simples possível, sem prejuízo dos seus fins, ou de outras características positivas; facilita a aprendizagem do seu funcionamento, reduz o número de potenciais erros, facilita a alteração
- modularidade — estruturada por módulos (vários módulos cada um com diferentes funções); estes expõem as suas funcionalidades de maneira a que outros as possam utilizar facilmente; esta característica facilita a análise, a utilização, a alteração, a aferição [efectuar testes com padrões de Entrada/Saída] e possibilita a reutilização
- composicionalidade — pressupondo um desenho modular, os módulos podem utilizar outros módulos para cumprir a sua função; tal representa uma dependência que pode ser obrigatória ou facultativa; no último caso, se a dependência de um módulo não é satisfeita, algumas das funcionalidades do módulo dependente podem não estar activas
- configurabilidade — capacidade de poder alterar ou ajustar a configuração de uma arquitectura através de parâmetros acessíveis externamente [a resposta à alteração dos parâmetros pode ou não ser imediata e automática, podendo estar sujeita a um comando de refrescamento, ou, no pior caso, ao reiniciar da aplicação]
- adaptabilidade — a capacidade de adaptação/regulação, automática, a características variantes do meio ambiente (características extrínsecas do sistema)
- robustez — força com que uma arquitectura resiste a condições adversas ou de excepção do meio ambiente; o conhecido teste do “macaco ao teclado” é uma condição de excepção para qualquer arquitectura, assim como lhe são adversas as falhas em linhas de comunicação e os períodos de sobrecarga no acesso a um componente servidor
Outras características positivas, muito abrangentes, mas, de fulcral importância:
- eficácia — se uma arquitectura satisfaz os seus fins (a cada fim, ou sim ou não); por vezes olha-se para uma arquitectura acabada e apercebesse-se que ficou algo, esquecido ou adiado, de fora [confesso que a ortografia da anterior conjugação do verbo «aperceber» fui vê-la ao dicionário e, ainda assim, tenho dúvidas se a utilizei/escrevi bem :-) ]
- eficiência (ou o inverso do desperdício) — o grau de aproveitamento dos recursos ambientais consumidos para o cumprimento do seus fins; a eficiência máxima, o valor 100%, corresponde a uma utilização dos recursos ambientais perfeita para o estrito cumprimento dos seus fins (apenas existe produção de valor e não existe desperdício); a eficiência mínima, o valor 0%, corresponde a um desperdício total: todos os recursos ambientais são gastos em fins que não os pretendidos, não sendo estes últimos sequer atingidos: o mesmo que a ineficácia!
- ajustamento ao problema (ou a fidelidade da representação) — quão ajustada está uma arquitectura ao seu fim; quão fiel é a sua representação do problema; um desenho injusto (desajustado) do problema traz consigo ineficiência na composição e no funcionamento; repetidas vezes observo que a complexidade das aplicações se deve a infiéis representações do problema: é como os parafusos philips (em cruz), podem ser apertados com uma chave de fendas, normal, mas com desnecessário esforço.
Pois, a cada sistema, a arquitectura que lhe seja fiel.
Muitas outras características existem, com certeza [gostaria que o meu leitor imaginário comentasse sobre elas…].
Mas há uma que deixei de fora, de propósito, pois será o tema do próximo artigo.
Acabámos por não sujar mais do que a ponta dos dedos.
sexta-feira, 9 de maio de 2008
Complexity - Object Oriented
com algo que me fez pensar uns minutos, não pude deixar de me rir, pois o que o autor
diz já o presenciei por diversar vezes em projecto.
Passo a citar:
" "The more complex the system, the more open it is to total breakdown".
Rarely would a builder think about addin a new sub-basement to an existing
100 - story building. Doing that would be very costly and would undoubedly invite
failure. Amazingly, users of sotware systems rarely think twice about asking for
equivalent changes. Besides they argue it it only a simple matter of programming. "
Depois continua a discução sobre a problemática da complexidade do software e
o seu impacto no software, custos prazos de entrega manutenção.
E agora a questão, como medimos a complexidade de um dado programa ?
O que isso nos permite inferir ?
Cumps
Luís
p.s. O livro: "Object Oriented Analysis and Design with Applications, Third Edition"
quarta-feira, 23 de abril de 2008
Learning Plan for Getting Started with Visual Studio 2008 for Developing Silverlight Applications
há uma data de material novo, principalmente a nível de e-learning disponibilizado pela microsoft.
Ainda não me foi possível processar todas as novidades, esta tal como o titulo indica é
para quem quer começar a desenvolver em Silverlight e Visual Studio 2008.
Cumps
Luís
terça-feira, 15 de abril de 2008
Exams Live Today (.NET 3.5)
Três exames da versão 3.5 da .net framework estão finalmente disponíveis na sua versão final.
São eles:
70-502: Windows Presentation Foundation
70-503: Windows Communication Foundation
70-504: Windows Workflow Foundation
Isto contráriamente ao que se via nas versões anteriores da .net framework tráz algumas novidades.
A que é mais óbvia, é que vamos passar a ter exames focados na tecnologia, isto é, temos um Exame de WPF, um de WCF, um de WWF, um de ASP.NET e um de ADO.NET.
Na versão anterior da .net framework, algumas das tecnologias, estavam "agrupadas", isto é, tinhamos um MCTS em Windows Applications, onde eram avaliados conhecimentos de Windows Forms mas também de ADO.NET, não existindo por exemplo um exame especifico de ADO.NET.
Vamos aguardar mais novidades para esta versão da .NET Framework
quarta-feira, 9 de abril de 2008
Enterprise Library 4.0 Community Technology Preview
encontra-se disponível a última versão da Enterprise Library mais o seu conjunto de Application Blocks.
Confesso que nestes dias, foi algo em que voltei a pensar e muito e de forma muito séria.
Senão vejamos, necessitamos de criar uma abstracção para ler parâmetros de configuração
para a nossa aplicação, existirá algum motivo para que isto de um modo geral não seja feito
de uma forma mais ou menos standard ?
Um dos últimos argumentos que ouvi, era algo do género, necessitamos de distribuir, uma parte da configuração que é comum a toda a gente na empresa. Essa parte da configuração pode sofrer um update e depois terá de ser reflectido em todo o lado.
A solução era "martelar" um App.config e depois copiá-lo para as centenas de postos de trabalho que existem por aqui onde me encontro. Isto, tinha como prejuízo "destruir" as configurações de cada um, pois se está tudo no mesmo lado o Copy do Windows ainda não faz merge de ficheiros de texto. Portanto os utilizadores teriam de alterar tudo de novo para configurarem os seus settings pessoais (paths de compilação, directorias de solution, etc ....)
Analisando o Configuration Application Block, vejo coisas que utilizei num outro projecto, que penso poderiam ser uteis aqui, citando directamente:
"Configuration stored in standard XML .config files by default
•Alternative “Configuration Sources” can be used
•Ships with System, File, Manageable and SQL configuration sources "
Ora bem, se neste cenário todos os utilizadores têm acesso a um servidor de sql, porque não colocar lá a configuração comum a todos nessa data source ?
Outra vantagem de utilizar o Application Block, quer se consumam os parâmetros de um ficheiro XML, ou de outra Data Source, o código que tem de ser escrito para consumir estes parâmetros é exactamente igual. Para que não hajam dúvidas, o código que consome os parâmetros, não o código que implementa o acesso ao ficheiro, ou ao sql ou ao MSMQ...
Algo que fica para pensar :) estou curioso para analisar esta última versão da Enterprise Library e vocês ?
terça-feira, 8 de abril de 2008
Chip Industry Confronts 'Software Gap' Between Multicore, Programming
também eu estive uns dias sem colocar pots, pelo título podem verificar que os fabricantes
de microprocessadores alertam para algo como um "gap" entre o software e que o hardware
nos proporciona.
Antes de termos os sistemas multi-core (não interessa para a discussão se são dual core, quad core, ...), o nosso sistema operativo, permitia-nos ter vários fios de execução, threads, bem como vários processos.
Aprendemos também que através de alguns mecanismos de sincronização que poderíamos garantir a coerência do nosso programa, lidando com o acesso concorrente a recursos partilhados.
Contudo, num sistema single processor, apesar de podermos lançar várias threads, só "corre" uma de cada vez, ficando a cargo do sistema operativo, saber quando e qual a próxima thread a "correr".
Verifica-se qua a maioria dos sistemas que estão actualmente em produção não tiram partido nenhum da utilização de várias threads nem estão optimizados para tal. Com estes novos CPU's, com vários cores, as threads podem ser "entregues" a um core diferente e aqui sim temos na realidade duas threads a correr em simultaneo.
Será que isto não virá fazer com que as técnicas da programação concorrente venham a ser muito mais relevantes do que o foram até aqui no mercado de trabalho ? Tipicamente era algo que recordávamos dos tempos de faculdade, mas que depois muito poucas vezes se utilizavam a nível profissional.
Outra questão, prende-se com a questão do desenho. Fazer debug e testar um sistema single thread é muito mais fácil do que testar e fazer debug um sistema multi thread.
Será que estamos preparados para desenhar os nossos sistemas e aplicações de modo a evitar dores de cabeça durante o desenvolvimento ?
Algo que fica para pensar, desvia-se um pouco do tema Microsoft, mas também aqui no mundo .Net apesar de termos muito suporte à programação concorrente poucas vezes se vê isto utilizado, contudo convém lembrar que nem sempre faz sentido este tipo de técnicas e que por vezes é melhor deixá-las de fora.
quinta-feira, 3 de abril de 2008
Curiosidade C#/ Windows Forms
este post é sobre algo curioso que encontrei hoje no código :)
Imaginem que tinham este código para gravar as settings do utilizador no ficheiro App.Config
de uma aplicação Windows forms em .net Framework 2.0.
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
try
{
System.Xml.XmlNode xmlTreeDepth = xmlDoc.SelectSingleNode("configuration/Configuration/TreeDepth");
xmlTreeDepth.InnerText = tBoxPArvore.Text;
ApplicationConfig.TreeDepth = Convert.ToInt32(tBoxPArvore.Text);
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
}
catch (Exception) { ..... }
Agora, vejam esta maneira diferente de gravar exactamente o mesmo parâmetro mas num ficheiro de settings, que permite exactamente o mesmo:
Properties.Settings.Default.TreeDepth = Convert.ToInt32(tBoxPArvore.Text);
Está longe de ser um post completo, contudo levanta aqui uma questão, será que exploramos de forma conveniente o que a Framework nos coloca disponível ?
:)
Prazo alargado Exames Beta ASP.NET ADO.NET
em ASP.NET e ADO.NET foram estendidos.
Quem quizer tentar pode fazê-lo até ao dia 4 de Maio.
Mais informações em:
TS: Microsoft .NET Framework 3.5, ASP.NET Application Development
http://www.microsoft.com/learning/exams/70-562.mspx
TS: Microsoft .NET Framework 3.5, ADO.NET Application Development
http://www.microsoft.com/learning/exams/70-561.mspx
quarta-feira, 2 de abril de 2008
Data de Retirada de Exames
como todos sabem neste momento a última versão da .Net Framework é a versão 3.5.
Contudo há ainda alguns exames na versão 1.0 e 1.1 da Framework que ainda se encontram disponiveis para realizar.
Estes exames irão ser retirados no dia 31/03/2009
Podem ler mais sobre isto em: http://www.microsoft.com/learning/mcpexams/status/examstoretire.mspx
Entretanto a quem se pretender propor a fazer exames nesta versão da Framework .net ponderem também a questão do upgrade que terão de fazer para a versão 2.0.
Isto implica pelo menos mais um exame, mas isso tem de ser visto caso a caso para se validar se existe essa migration path.
Cumps
Luís
terça-feira, 25 de março de 2008
Certificações .Net Framework 2.0 MCTS
em tecnologia .Net da Microsoft, para que possam saber quais os exames que estão disponíveis
para esta versão da Framework.
Vou descrever um dos níveis, a que se podem chegar com as certificações,
neste caso o primeiro.
MCTS - Microsoft Certified Tecnology Specialist
Para MCTS, temos os seguintes percursos:
1 - .NET Framework 2.0 Windows Applications
2 - .NET Framework 2.0 Web Applications
3 - .NET Framework 2.0 Distributed Applications
Para todos o exame 70-536 é obrigatório, alerto que este exame é válido no novo ciclo de certificações em .NET Framework 3.5.
Para se ser MTCS Windows Applications, necessitamos de dois exames:
70-536 TS: Microsoft .NET Framework 2.0 – Application Development Foundation
70-526 TS: Microsoft .NET Framework 2.0 – Windows-Based Client Development
Para se ser MCTS Web Applications, necessitamos de dois exames:
70-536 TS: Microsoft .NET Framework 2.0 – Application Development Foundation
70-528 TS: Microsoft .NET Framework 2.0 - Web-Based Client Development
Para se ser MTCS Distributed Applications, necessitamos de dois exames:
70-536 TS: Microsoft .NET Framework 2.0 – Application Development Foundation
70-529 TS: Microsoft .NET Framework 2.0 – Distributed Application Development
Portanto, a reter, para se obter o grau de MCTS são necessários sempre dois exames.
O 70-536 é comum a todos e como tal só necessita de ser feito uma vez.
Este exame (70-536) uma vez feito com aproveitamento confere o "grau" de
TS: Microsoft .NET Framework 2.0 – Application Development Foundation.
Se só se fizer um exame, o consultor fica um TS - Technology specialist, por exemplo se um consultor fizer o exame 70-526, fica um TS em Windows Based Client Development.
No próximo post, irei descrever o nível seguinte de certificações o MCPD - Microsoft Certified Professional Developer, adianto que este nível obriga a que se seja um MCTS.