Postagens

Mostrando postagens de janeiro, 2015

6 maneiras de fazer a mesma coisa, o que é considerado boas práticas?

As vezes tem tantas maneiras diferentes de fazer o mesmo código que nós ficamos na dúvida quanto a qual maneira usar. O que seria considerado "boa prática" pela comunidade e o que sua equipe entenderia melhor. Suponhamos que você esteja trabalhando dentro de um método de um Domain Service chamado UmDomainServiceChique(objetoDoDominio) que será chamado por uma API. Você tem uma regra de negócio chique para ser verificada que por enquanto chamarei de VerificaMinhaRegraChiqueComplexa(). Você chama UmDomainServiceChique(objetoDoDominio) e caso VerificaMinhaRegraChiqueComplexa() retorne true você vai querer que UmDomainServiceChique faça o que tem que fazer e a api retornar Ok 200, caso contrário você quer que a API responda um erro qualquer, tipo BadRequest, e retornar uma mensagem dizendo que VerificaMinhaRegraChiqueComplexa deu ruim. Eu vejo 6 maneiras de fazer isso, gostaria de saber a opinião de outrs devs sobre qual seria a maneira menos gambiarr

Programação orientada a objetos, mas afinal o que diabos é isso?

Hoje eu programo orientado a objetos. Pelo menos eu "acho" isso. Conheci muita gente que dizia que programava orientado a objetos mas na verdade programava de maneira procedural, orientado a evento ou RAD. Não que as outras metodologias sejam ruins, mas é que muitas vezes elas são a ferramenta errada para se resolver  o problema. Além disso muitos programadores misturam as metodologias combinando o pior das duas em vez de o melhor das duas. Já vi até programadores dizerem que programam orientado a objeto simplesmente porque a linguagem é orientada a objeto, ou pior ainda, porque a IDE tem "objetos" que você arrasta e solta em uma "form" e que você acessa funções (métodos) destes com seu nome e um ".". Meu amigo, isso é RAD e não POO. Embora RAD tenha o seu valor para prototipação e aplicações rápidas e sujas, não é um bom ambiente de desenvolvimento a longo prazo. É uma programação orientada a evento degenerada. Além disso, por mais que a l

Lista ligada em C#

Imagem
Um dos assuntos que estudamos em ciência da computação ou processamento de dados que eu mais gosto é: Algoritmos e Estrutura de Dados. Se bem que gostar não é garantia de dominar, né? É sempre um assunto meio complicado. Admiro muito os professores dessa  matéria, que resolvem problemas desse tipo quase sem pensar. Uma das coisas que se estuda nessa matéria é a Lista Ligada.  Trata-se de uma estrutura simples, porém poderosa, onde um atributo desta estrutura é um dado (de qualquer tipo que o programador queira) e um ponteiro para um próximo objeto de mesmo tipo. Se o ponteiro for null (em linguagens c-like, nil em pascal, nothing em basic) significa que não há próximo objeto. Abaixo a figura de um nó da lista. Esses nós podem ser ligados uns aos outros em cadeias, conforme a figura abaixo. Além disso as listas podem ter dois ponteiros, um apontando para o elemento posterior e outro apontando para o anterior, formando uma lista duplamente ligada. A lista pode também ser

Função para criar nova data em SQL

O SQL 2012 e superior tem a função DATEFROMPARTS para criar uma nova data a partir dos inteiros Ano, Mes e Dia, mas as versões 2000, 2005 e 2008 como é que fica? Fica assim: você mesmo faz a função. SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ############################################################################################################################################ -- # NOME : DATEFROMPARTS -- # PRODUTO : SQL Server -- # DEVELOPER : Vitor Luiz Rubio -- # COPYRIGHT : -- # OBJETIVO : Gerar uma data a partir dos seus componentes inteiros -- # VERSAO : 1.0 -- # DT. CRIACAO : 2013-04-18 -- # DT. ALTERACAO : -- # -- # DEPENDENCIAS : -- # -- # DEPENDENTES : -- # -- # HISTÓRICO -- # 2013-04-18 : Criação -- # -- ############################################################################################################################################ CREATE FUNCTION DATEFROMPARTS ( @Year int, @Month int, @Day int ) RETURNS datetime AS BEGIN --da

Duas maneiras de listar as chaves estrangeiras de um banco de dados

AS vezes precisamos listar todas as chaves estrangeiras de um banco de dados (e as tabelas/campos referenciados pelas mesmas). Tanto para automação de nosso mecanismo de persistência como para documentação do banco de dados. Em algumas operações nós precisamos excluir todas as constraints, para fazer alguma manutenção ou inclusão desconsiderando-se a integridade referencial (geralmente ao passar dados de um banco para outro, cargas, restaurações etc), sendo estas recriadas depois. A consulta pelas chaves estrangeiras pode ser feita usando-se as tabelas de sistema sysobjects e syscolumns ou as views de sistema INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS e INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE. Usando sysobjects  e syscolumns SELECT o3.name 'Nome_Chave_Estrangeira', o2.name 'Tabela', sc1.name 'Coluna (FK)', o1.name 'Tabela Referenciada', sc2.name 'Coluna Referenciada (PK)'foreign key ('+sc1.name+') references '+o1.