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

Usando tabelas de sistema do MS SQL Server para encontrar procedures

Quando o seu banco de dados possui muitas tabelas e muitas stored procedures  controlar as dependências pode ser difícil e chato. Sempre que for alterar uma tabela terá que saber de antemão quais são as trocentas procedures que dependem dela.

A mesma coisa quando for alterar uma function, podem ter várias procedures que a usam.

Mesmo assim continuamos a trabalhar com procedures pela facilidade que elas nos dão de distribuir a carga do sistema, fazendo parte do processamento no servidor. Além disso a execução de procedures gera comandos de comprimento menor do que a execução de SQL Direto "ad hoc".

Para facilitar a busca de procedures que usam uma tabela ou que contenham uma determinada palavra-chave eu criei essa stored procedure abaixo, onde você simplesmente executa ela passando uma string entre sinais de % e ela te retorna todas as procedures que contenham essa palavra chave. Provavelmente essas você terá de alterar.

Para isso uso duas das tabelas de sistema do SQL Server. O exemplo é bem simples.


-- ################################################################################
-- # NOME   : SPVTR_Procura_Procedures
-- # PRODUTO  : Módulo: Manutenções de bancos de dados
-- # DEVELOPER  : Vitor Luiz Rubio
-- # COPYRIGHT  : 
-- # OBJETIVO  : Listar todos os nomes de procedures ou outros objetos que contenham em seu text determinada palavra ou tabela
-- # VERSAO   : 1.0
-- # DT. CRIACAO : 2008-01-02
-- # DT. ALTERACAO : 
-- #
-- # DEPENDENCIAS:
-- # Tabelas de sistema, sysobjects, syscomments
-- # DEPENDENTES:
-- #
-- # HISTÓRICO
-- #  2008-01-02 : Criação
-- #  
-- ################################################################################

  
CREATE PROCEDURE [dbo].[SPVTR_Procura_Procedures] (  
 @Procura varchar(255)
)  
AS  
  
SET NOCOUNT ON  
  
declare @SQL varchar(8000)

set @SQL = 'select distinct(O.Name) from sysobjects O (NOLOCK) inner join syscomments C (NOLOCK) on C.id = O.id 
where C.Text like' + '''' +  @Procura + ''''

exec (@SQL)

  
SET NOCOUNT OFF



Modo de usar:  SPVTR_Procura_Procedures '%Clientes%'


Espero que seja útil, have fun ^^

Comentários

Postagens mais visitadas deste blog

Botão Add This para adicionar seu post em qualquer rede

Busca de CEP com o Lazarus - Parte 1 - UrlEncode

Uso de memória no SQL Server