Rafael Noronha

closing the gap between business and technology

Archive for July, 2009

(Inglês) Right tool for the right job

without comments

Este texto está disponível apenas em Inglês.

Written by rafanoronha

July 27th, 2009 at 12:23 am

Teste dedo-duro

with one comment

Tem um colega de equipe que não dá pra confiar?
creisson
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!

Written by rafanoronha

July 14th, 2009 at 1:57 am

Getting Real – Review

with 2 comments

37signals_getting_real
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á.

Written by rafanoronha

July 11th, 2009 at 12:42 pm

Posted in Sem categoria

Tagged with

ORM – Você ainda não usa?

without comments

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:

  1. 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.

  2. 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.

  3. 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.

Written by rafanoronha

July 6th, 2009 at 1:46 am

Posted in Sem categoria

Tagged with ,