Archive for July, 2009
(Inglês) Right tool for the right job
Este texto está disponível apenas em Inglês.
Teste dedo-duro
Tem um colega de equipe que não dá pra confiar?

Seus problemas acabaram…
Teste dedo-duro
[Test] public void controllers_wich_require_full_authentication() { var theseDoesNotRequire = new[] { typeof(AccountController), typeof(ErrorController), typeof(CustomController), typeof(HomeController) }; foreach (var c in typeof(CustomController).Assembly.GetTypes() .Where(t => typeof(Controller).IsAssignableFrom(t) && !theseDoesNotRequire.Contains(t))) { var attr = c.GetCustomAttributes(typeof(AuthorizeAttribute), false); Assert.IsTrue(attr.Length == 1); var authorize = attr[0] as AuthorizeAttribute; Assert.AreEqual(string.Empty, authorize.Roles); Assert.AreEqual(string.Empty, authorize.Users); Assert.AreEqual(-1, authorize.Order); } } [Test] public void all_controllers_should_inherit_custom_controller() { foreach (var c in typeof(CustomController).Assembly.GetTypes() .Where(t => typeof(Controller).IsAssignableFrom(t) && t != typeof(CustomController))) { Assert.AreEqual(typeof(CustomController), c.BaseType); } } [Test] public void all_persisted_models_must_inherit_this_class() { foreach (Type type in typeof(WorkPeriod).Assembly.GetTypes() .Where(t => t.GetCustomAttributes(typeof(ActiveRecordAttribute), false) .Count() > 0)) { Assert.IsNotNull(type.BaseType); Assert.AreEqual(typeof(IdentifiedEntity<>), type.BaseType.GetGenericTypeDefinition()); } }Obs:
Provavelmente uma ferramenta legal para tratar este tipo de problema é um code analyser, como o FxCop.
Mas esta não deixa de ser uma opção bastante prática.Sobre o colega incompetente, um pé na bunda é sempre a melhor solução (quando se trata daquele profissional que é ruim e não quer melhorar).
Independente da competência da equipe, é sempre bom automatizar este tipo de coisa!
Getting Real – Review

Quando comecei a ler Getting Real percebi imediatamente a riqueza existente em cada página parágrafo existente no livro.
Trata-se de uma compilação de boas práticas, valores e pincípios que são aplicados não apenas pelos autores do livro, mas também por qualquer start-up que venha atuando com sucesso no mercado web.
Getting Real reúne a experiência e o modo de pensar de pessoas que alcançaram grandes feitos atuando em cenários de escassez de recursos.
Que tipo de atitude deixará o seu projeto mais próximo do sucesso?
Que tipo de atitude deixará o seu projeto mais próximo do fracasso?
Entenda o que está por trás dos resultados obtidos por pessoas extremamente perspicazes.
Encante-se com a simplicidade de idéias que quando colocadas em práticas poderão fazer toda a diferença.
Caia na real.
E dificilmente você voltará de lá.
ORM – Você ainda não usa?
No mercado de .Net software ainda é comum encontrarmos sistemas corporativos que não optaram em sua concepção pela adoção de um framework ORM.
Felizmente aquilo que traz bons resultados cedo ou tarde tende a entrar em tendência.
É o que aos poucos vem acontecendo dentro deste cenário.
ORM é uma técnica de mapeamento entre dados relacionais de um banco de dados e objetos de software existentes em uma aplicação escrita em uma linguagem orientada a objetos.
Existem diversos frameworks que viabilizam a utilização desta técnica.
Dentro da plataforma .net, cito NHibernate, Linq To Entities e SubSonic, como bons exemplos.
Projetos de sistemas corporativos comumente compartilham de características que fazem do uso deste tipo de solução uma boa escolha. (Quando foi a última vez que você escreveu um software que não possuia o requisito de persistir dados em um banco relacional?)
O que pretendo aqui é listar alguns dos resultados alcançados com a correta implementação de uma solução ORM neste tipo de projeto:
-
Maior foco na agregação de valor ao negócio do cliente.
Maiores esforços serão direcionados à soluções que atendam as reais necessidades do cliente, em contrapartida a esforços voltados ao desenvolvimento de código extenso e repetitivo, propenso a erro e de nenhum valor de negócio.
-
Sintonia com os trabalhos de arquitetura e testes.
A utilização de um framework ORM facilitará a definição de uma arquitetura de software flexível e extensível.
A abstração e transparência da persistência de dados também se alinhará perfeitamente com a definição de estratégias de cobertura de testes para a base de código. -
Redução considerável da quantidade de código a ser escrito e posteriormente mantido.
Este é o aspecto mais interessante do ponto de vista comercial.
Significa entregas mais rápidas, redução de custos e ganho de agilidade.
Aumento de competitividade.
Concluindo, quando falamos em mapeamento objeto-relacional, não estamos falando apenas de uma solução técnica comprovadamente eficaz.
Estamos falando também de uma solução que traz competitividade ao fornecedor e aumento da qualidade do produto entregue ao cliente.
Note que a aplicação deste tipo de solução não é recomendada para todo e qualquer tipo de cenário.
No entanto, grande parte deles costuma se mostrar completamente compatível.