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

Nota Fiscal - Estrutura de tabelas

Nota Fiscal é fogo. Difícil, chato, repetitivo e cansativo. E agora tem a nota fiscal eletrônica para complicar mais ainda. Para facilitar a vida de quem está começando, vou postar aqui a estrutura das minhas tabelas, que está longe de ser ideal, mas quebra um galho.

/* Table: NOTAFISCAL, Owner: SYSDBA */

CREATE TABLE "NOTAFISCAL"
(
  "CODNOTA"  INTEGER NOT NULL,
  "CODVENDA"  INTEGER,
  "NATUREZAOPERACAO"  VARCHAR(50),
  "CFOP"  INTEGER,
  "INSCRESTSUBSTTRIBUT"  VARCHAR(20),
  "ENTSAI"  INTEGER,
  "DESTINATARIOREMETENTE"  VARCHAR(100),
  "CPCN"  VARCHAR(20),
  "DTEMISSAO"  DATE,
  "DTSAIDAENTRADA"  DATE,
  "HORASAIDA"  TIMESTAMP,
  "BASECALCICMS"  DOUBLE PRECISION,
  "VALORICMS"  DOUBLE PRECISION,
  "NOMETRANSPORTADORA"  VARCHAR(100),
  "NUMNOTA"  INTEGER,
  "DESREMENDERECO"  VARCHAR(80),
  "DESREMBAIRRO"  VARCHAR(50),
  "DESREMCEP"  VARCHAR(9),
  "DESREMMUNICIPIO"  VARCHAR(80),
  "DESREMFONE"  VARCHAR(15),
  "DESREMUF"  VARCHAR(2),
  "DESREMIE"  VARCHAR(15),
  "DESREMRAZAO"  VARCHAR(80),
  "VALORTOTALPRODUTOS"  DOUBLE PRECISION,
  "VALORTOTALNOTA"  DOUBLE PRECISION,
  "NUMEROFORMULARIO"  INTEGER,
  "TRANSRAZAO"  VARCHAR(80),
  "TRANSFRETE"  INTEGER,
  "TRASPLACAVEICULO"  VARCHAR(10),
  "TRANSUFVEICULO"  VARCHAR(2),
  "TRANSCPCN"  VARCHAR(14),
  "TRANSENDERECO"  VARCHAR(80),
  "TRANSMUNICIPIO"  VARCHAR(80),
  "TRANSUF"  VARCHAR(2),
  "TRANSIE"  VARCHAR(15),
  "CODTPR"  INTEGER,
  "CANCELADA"  INTEGER,
  "RGIE"  VARCHAR(12),
  "DESREMNUMERO"  VARCHAR(20),
  "BASECALCICMSSUBST"  DOUBLE PRECISION,
  "VALORICMSSUBST"  DOUBLE PRECISION,
  "JUSTIFICATIVA"  VARCHAR(50),
  "DESREMCODUF"  INTEGER,
  "DESREMCODCIDADE"  INTEGER,
  "CHAVENOTA"  VARCHAR(14),
  "NUMEROPROTOCOLO"  VARCHAR(50),
  "NUMERORECIBO"  VARCHAR(50),
  "QUANTIDADE"  INTEGER,
  "ESPECIE"  VARCHAR(50),
  "MARCA"  VARCHAR(50),
  "PESOBRUTO"  DOUBLE PRECISION,
  "PESOLIQUIDO"  DOUBLE PRECISION,
 PRIMARY KEY ("CODNOTA")
);
ALTER TABLE "NOTAFISCAL" ADD CONSTRAINT "FK_NOTAFISCAL_TRANSPORTADORA" FOREIGN KEY ("CODTPR") REFERENCES "TRANSPORTADORAS" ("CODTPR");
ALTER TABLE "NOTAFISCAL" ADD CONSTRAINT "FK_NOTAFISCAL_VENDA" FOREIGN KEY ("CODVENDA") REFERENCES "VENDAS" ("CODVENDA");






/* Table: NOTAFISCALITENS, Owner: SYSDBA */

CREATE TABLE "NOTAFISCALITENS"
(
  "CODITEM"  INTEGER NOT NULL,
  "CODNOTA"  INTEGER,
  "CODPRO"  INTEGER,
  "DESCRPRO"  VARCHAR(80),
  "UNIDADE"  VARCHAR(3),
  "QTDE"  DOUBLE PRECISION,
  "VALORTOTAL"  DOUBLE PRECISION,
  "ALIQICMS"  DOUBLE PRECISION,
  "CODIGOPRODUTO"  VARCHAR(20),
  "VALORUNITARIO"  DOUBLE PRECISION,
  "CODSITTRIBUT"  INTEGER,
  "CODCLASSFISCAL"  INTEGER,
  "SITTRIBUT"  VARCHAR(50),
  "CLASSFISCAL"  VARCHAR(50),
  "ABREVSITTRIBUT"  VARCHAR(4),
  "ABREVCLASSFISCAL"  VARCHAR(4),
  "CFOP"  INTEGER,
 PRIMARY KEY ("CODITEM")
);
ALTER TABLE "NOTAFISCALITENS" ADD CONSTRAINT "FK_NOTAFISCALITENS_NOTAFISCAL" FOREIGN KEY ("CODNOTA") REFERENCES "NOTAFISCAL" ("CODNOTA") ON DELETE CASCADE;
SET TERM ^ ;


/* Triggers only will work for SQL triggers */

CREATE TRIGGER "INSNOTAFISCALITENS" FOR "NOTAFISCALITENS"
ACTIVE BEFORE INSERT POSITION 0
AS
 BEGIN
  NEW.coditem = GEN_ID(gnNotaFiscalItens, 1);
 END
 ^

COMMIT WORK ^
SET TERM ;^




Usei para isso o banco de dados Firebird.

Tenho alguns campos que são propositalmente redundantes, porque no momento em que eu emito/lanço uma nota fiscal, eu copio as informações da venda para a nota fiscal, e as informações de cada item da venda (produtos) para cada item da nota.

Comentários

  1. É fera, to numa situação aqui que tava precisando disso.
    To usando php e mysql, leio um arquivo xml à minha escolha e depois mostro todas a informações que eu precisar na tela e depois salvo no banco.
    Tava fazendo uns 'brainstorms' do banco, aí desisti...acabei encontrando teu blog que ajudou muito ^^
    Valeu por compartilhar :D

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Busca de CEP com o Lazarus - Parte 1 - UrlEncode

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

Uso de memória no SQL Server