Você está na página 1de 8

30/01/2017 BoasprticasdeprogramaoemGenexusPortugus

GeneXus Community Wiki (wiki?1755,Wiki+Home,)

Login Register

TryaSearch

BoasprticasdeprogramaoemGenexusPortugus
VersoOriginalemEspanhol(wiki?1985,Buenas+Pr%C3%A1cticas+de+programaci%C3%B3n+en+GeneXus,)

AsboasprticasdeprogramaoemGenexusservemparamelhoraracompreensoeclarezadocdigo,almdepermitirunificar
critriosentrevriosprogramadoresdasempresas.

AsboasprticasdeprogramaoemGenexusiniciasebaseandoqueocdigoamelhordocumentaoqueumsistemadevater,
poristotambmamelhorferramentaqueumprogramadortemparacompartilharseutrabalhoaosdemaisprogramadores.

AoUtilizarboasprticasdeprogramaoemGenexusocdigodaKbobtmumvaloragregadojquepossui:

Fcilintegraoereutilizao
Fcilcompreensoporpartedoprogramador
Unificaodecritrios
Eliminaodezonasobscuras(ocultas)nocdigo
Fcilcomunicaoentreosprogramadores
Clarezaecdigoescritocorretamente
DiminuiosignificativanamanutenodoSoftware

AsboasprticasdeprogramaoemGenexusestocompostasporregraserecomendaes:

Regras

01)AonomearatributosdeveseutilizaranomenclaturaGIK(GeneXusIncrementalKnowledgeBase)

02)OsatributosdeveroterdescrioeHelp(ajuda)

Nome:CliCod
Descrio:CdigodoCliente
Help:IdentificadordoClientenosistema.

03)Astabelasdevemternomesquerepresentemarealidadeenoumnomeherdadopelatransaoqueacria.

Transao:Cli2SisPro
Tabela:Clientes

04)Asvariveisquefaamreferenciaaumatributodevemserbaseadasnomesmo(baseadonatribute)eteromesmonome
doatributo,sealgicaassimpermitir.
http://wiki.genexus.com/commwiki/servlet/wiki?7698,Boas+pr%C3%A1ticas+de+programa%C3%A7%C3%A3o+em+Genexus+++Portugu%C3%AAs 1/8
30/01/2017 BoasprticasdeprogramaoemGenexusPortugus

Atributo:CliCod C(20) CdigodoCliente


Variable:&CliCod C(20) CdigodoCliente

05)RelatriodeEspecificao

ConsideraseumboaprticaqueoAnalista/ProgramadorGenexusrevisemcomatenoorelatriodeespecificaojque
esteaprincipalferramentaquepermiteidentificarerrosnocdigo.

DefiniodeRegras

Emocasiesquenosedefineumpadroparaescreverasregras,ficaumcdigomuito"complexo",difcildeentendero
comportamentodesejadoparaumatributoemparticular.

Exemplo(ERRADO,Sempadro):

Parm(in:EmpCod,in:&Usuario,in:&CliCod,in:&Mode);

noaccept(CiuCod);

&CliSaldoAux=udp(PcalcSaldo,EmpCod,&CliCod,CliSaldo);

error('Mensaje')IfNull(&Usuario);

allownulls(EmpCod,LocCod);

Call(PActInfo,EmpCod,CliCod)if<cond>;

error('Mensaje')IFCliDir=nullvalue(CliDir)andafter(CliDir);

prompt(Wclientes,EmpCod,CliCod);

default(CliFchCrea,Now());

noaccept(EmpCod);

Call(PInfoUsr,EmpCod,&Usuario)if<cond>;

nocheck(EmpCod,LocCod);

msg('Saldomenorquecero')ifCliSaldo<0;

Refcall(Wclientes,EmpCod,CliCod);

Call(Pprocedure,EmpCod,CliCod)if<cond>;

default(CliArea,'A');

06)Aoobservarmosocdigoacima,nosdamoscontaqueparabuscaralgotemosquerecorreratofinaldasregras,jquenos
mostranenhumcritrioaseguir.Existemmuitasmaneirasdedefinirasregrasparaquesejamfceisdeentender,poisvamos
estabelecerumcritriocomoboasprticasdeprogramao.

Sugesto/ExemploCorreto:

http://wiki.genexus.com/commwiki/servlet/wiki?7698,Boas+pr%C3%A1ticas+de+programa%C3%A7%C3%A3o+em+Genexus+++Portugu%C3%AAs 2/8
30/01/2017 BoasprticasdeprogramaoemGenexusPortugus

parm(parm1,parm2,...);

//INSTANCIARREGISTROS(PARMETRO)

//DEFAULTs
default(CliFchCrea,Now());

//NOACCEPTs
noaccept(EmpCod);

//ATRIBUIES
CliEdad=Age(CliFchNac);

//INTEGRIDADEREFERENCIAL
allownulls(EmpCod,LocCod);
nocheck(EmpCod,LocCod);

//VALIDAODECAMPOS
error("Nombredeclienteincorrecto.")ifnull(CliNom);

//VALIDAODEREGISTROS
error("Lafechadevencimientonopuedesermenoraladeldocumento.")ifDocFchVenc<DocFch;

//PROMPTs
prompt(WClientes,CliCod);

//CALL/AES
Call(PInfoUsr,EmpCod,&Usuario)if<cond>;

Recomendaes

07)AdescriodosobjetosdaKBdevemserclaramenteexplicativosindependentesdonomedomesmo

Nome:ModCliFinanceiro
Descripcin:ModificacodosClientesdoFinanceiro

08)Utilizarnomesmnemnicosparaasvariveisquenocorrespondamanenhumatributodosistema.

Seatribuiraumavarivelaexistnciadeumcliente
Formacorreta:ExisteCliente
FormaIncorreta:Flag

09)UtilizarnomesmnennicosparaosobjetosdaKB

TrabalharComClientes

10)Nocabealhodosprogramas(Procs)dedeveterumquadrodecomentrioscomumapequenadescriodopropsitodo
mesmoedadoteis.

http://wiki.genexus.com/commwiki/servlet/wiki?7698,Boas+pr%C3%A1ticas+de+programa%C3%A7%C3%A3o+em+Genexus+++Portugu%C3%AAs 3/8
30/01/2017 BoasprticasdeprogramaoemGenexusPortugus

/*
Autor..........:CristhinGmez(urulinux@adinet.com.uy)
Datadecriao:26062004
Parmetrosin..:
Parmetrosout.:
Alteradoem...:27062004
Comentrios....:TrocaoStatusdosclienteslogoapsaconfirmaoeliberaopeloFinanceiro.
*/

11)Colocarumalinhaembrancoentreasdefiniesdoseventoseassubrotinasparasepararosmemosedeixarmais
compreensvelosprogramas.

12)Dentrodoseventossedevecomearaescrveroscdigosapsterfeitoaidentao(tabulao)corretamente,istofacilitaa
visualizaodocdigo.

//Formaincorreta:
Event'NuevoCli'
If&CliCod=&Cliente
//Codigo
Endif
EndEvent

//FormaCorreta:
Event'NuevoCli'
If&CliCod=&Cliente
//Codigo
Endif
EndEvent

13)ParaqueosForEachfiquemmaisclarosefceisdeidentificardentrodoseventosounocdigoemgeral,recomendase
queescrevamdaseguintemaneira:

//FormaIncorreta(semidentao):
Event'NuevoCli'
ForEach
whereCliCod=&CliCod
//Cdigo
EndFor
EndEvent

//Formacorreta(comidentao):
Event'NuevoCli'
ForEach
whereCliCod=&CliCod
//Cdigo
EndFor
EndEvent

14)Noutilizarfiltrosemvrioslocais(Parmetro,sourceecondio)aomesmotempodentrodeumaprocedure,utilize
apenasemumlocal"ClusulaWhere"deumForeach.

15)ParaqueosfiltrosdosForEachfiquemmaisclaros,recomendaseterumwhereparacadacondioenoutilizar(AND)

http://wiki.genexus.com/commwiki/servlet/wiki?7698,Boas+pr%C3%A1ticas+de+programa%C3%A7%C3%A3o+em+Genexus+++Portugu%C3%AAs 4/8
30/01/2017 BoasprticasdeprogramaoemGenexusPortugus

//Formaincorreta:
ForEach
whereCliCod=&CliCodandCliStatus=&CliStatusandCliTipo=&CliTipo
//Cdigo
EndFor

//Formacorreta(UmWhereparacadacondio):
ForEach
whereCliCod=&CliCod
whereCliStatus=&CliStatus
whereCliTipo=&CliTipo

//Cdigo
EndFor

/*ComentariodeDemetrioToledo.
GeralmenteacostumoidentificarsempreatabelabasedeondevoutrabalharcomoForEachutilizandoasentenaDefinedBy,no
seguinteformato.

FOREACHClicod,CliStatus//GX:CLIENTES
WhereCliCod=&CliCod
WhereCliStatus=&CliStatus
WhereCliTipo=&CliTipo
DefinedByCliEstReg
//Codigo
ENDFOR

/*ComentariodeAdilsonCosta.
Aproveitandoocomentrioanteriorondeidentificadaatabelabase,almdeinformaronomedatabela,identificotambmasua
descrio.
UtilizotambmamesmainformaonofechamentodoForEachparafacilitarquandoestamosutilizandoForEachaninhados.

ForEachOrderClicod,CliStatus//Clientes>TabeladeClientes
WhereCliCod=&CliCod
WhereCliStatus=&CliStatus
WhereCliTipo=&CliTipo

//Codigo

EndFor//Clientes>TabeladeClientes

16)Colocarespaodepoisdecada(,)nasregras,call,udp,etc.paraquetodososprogramasfiquemmaisfceisdeentender.

//Formaincorreta:
parm(&CliCod,&UsuCod,&Tipo);
call(MiObjeto,CliCod,UsuCod,&Tipo)

//Formacorreta:
parm(&CliCod,&UsuCod,&Tipo);
call(MiObjeto,CliCod,UsuCod,&Tipo)

17)Eviteabreviarexcesivamente

Osnomesdasvariveis,subrotinas,objetos,etc,devemseromaisclaropossveisjquesealgumexternotrabalharcomocdigo,
almdeentenderocdigoemgeral,
deverestardescifrandoosnomesdecadavariveis,etc.

http://wiki.genexus.com/commwiki/servlet/wiki?7698,Boas+pr%C3%A1ticas+de+programa%C3%A7%C3%A3o+em+Genexus+++Portugu%C3%AAs 5/8
30/01/2017 BoasprticasdeprogramaoemGenexusPortugus

Exemplo:Sequiseratribuiraumavariveloclienteporfornecedor

//FormaIncorreta:
&CPForn

//Formacorreta:
&ClientePorFornecedor

18)Clarezanocdigo

Aclarezanocdigotambmseconsideraumaboaprticadeprogramao,emmuitoscasosporcostumedosprogramadores
abusamdousodo"if"esquecendoqueexisteo
comando"DoCase".EmmuitoscasosistosedeveasprimeirasversesdoGenexusquenosuportavamestecomandoede
costumenotrocaram/modificaramaescritadocdigo.

19)OsatributosdevemestarbaseadosemDomnios(Domains)

Devesedefinirtodososatributossemprequepossvel,sejambaseadosemalgumDomnio,sendofciladaptarseaalteraesde
tiposoularguras.

20)UtilizaodePatterns,quandopossvel.

RecomendasequetodaaplicaowebutilizePatterns,osPatterns(padres)nosoferecemumaferramentaidealparacriar
aplicaesweb.Facilitamamigraodoambientewinawebenosoferecemumaformaprticadesolucionarproblemasqueantes
demorvamosmuitotempo.

21)Evitarconstantesnocdigo

UsarosEnumeradoresaoinvsdeconstantesnocdigo.Destamaneirasetrocaraconstantenonecessriotrocaremtodosos
objetosqueelautilizada.

&Type="CR"//Errado

&Type=BalanceType.Credit//Correto

22)ManutenodasKb's

Anaturezadamaioriadosprojetosnoslevaacrerqueestamosfazendoalteraesconstantesnoconhecimentoinicialquetemos
armazenadosemnossasKbs.Assolicitaesdealteraodosclientesdisparamummontedeaesqueemdiversasocasies
modificamgrandepartedanossalgicainicialdenegcios.

IstofazcomqueexistamKB'squetenhammuitosobjetos,atributosetabelasquenoseutilizamouquedeixaramdeseutilizarpor

http://wiki.genexus.com/commwiki/servlet/wiki?7698,Boas+pr%C3%A1ticas+de+programa%C3%A7%C3%A3o+em+Genexus+++Portugu%C3%AAs 6/8
30/01/2017 BoasprticasdeprogramaoemGenexusPortugus

algumaalteraooureconstruodocdigo.OquepossibilitarquenaKBexistaobjetosduplicadosedesnecessrioseamedida
queumaKBcresce,crescetambmostemposdeproduo.

Existemtarefasquesemnosdarmoscontapoderemosotimizarnossaskb,realizandoamanutenodoconhecimentoexistenteem
umakb.Fazendoumaboamanutenopodemosbaixarostemposde:

BuildAll

CopyModel

UpdateModel

GenerateHelp

PublicacindeInformacinconGXPublic

Respaldos

Seriabomemcertasocasiestomarmosumtempolivreparaapagartodososobjetos,atributos,domnios,butipoisetabelasqueno
utilizarmos.IstodiminuirostemposdeproduoeajudarbastantequenossasKB'stenhmoconhecimentoquenecessitapara
responderasnossasnecessidades.

UmadascoisasquefazcomqueumaKBcresatermodelossemutilizar.Comorecomendaoseriabomeliminartodosos
modelosquenoseutilizememumaKB.

23)Encapsularcdigomedianteousodeatributosfrmula

Umaspectomuitorelevantenahoradedarmanutenonosoftwareterasdefiniesdosvriostiposdeclculosqueserealizam
sobreosdadosemumlocalcentralizado.ParaistorecomendamosterincorporadoestesclculoscomoatributosFRMULA.Neste
formatonosasseguramosquequandosetrocaoclculoquesequerrealizarparaobterumadeterminadainformao,setrocao
atributofrmulaeistovlidoparatodoosistema.

PorltimoumanomenclaturapropostaparaoscasosemqueadefiniodeumATT(atributo)frmulaestbaseadoemum
procedimento."Exemplo:CliSdoRes=udp(P...)"onomedoprocedimentodeveserigualaonomedoatributo.

Noexemploanteriorficaria"CliSdoRes=udp(PCliSdoRes...)",outraopocolocarantesdonomedaproc(procedure)osufixo"frm",
noexemplocitadoanteriormenteficaria"CliSdoRes=udp(PfrmCliSdoRes).

Forwardlinks
BuenasPrcticasdeprogramacinenGene...(wiki?1985,Buenas+Pr%C3%A1cticas+de+programaci%C3%B3n+en+GeneXus)

Morefromrcoproc
Seeall
BuenasPrcticasdeprogramacinenGene...(wiki?1985,Buenas+Pr%C3%A1cticas+de+programaci%C3%B3n+en+GeneXus,)
RCOGXToolsPack(wiki?10421,RCO+GXTools+Pack,)

http://wiki.genexus.com/commwiki/servlet/wiki?7698,Boas+pr%C3%A1ticas+de+programa%C3%A7%C3%A3o+em+Genexus+++Portugu%C3%AAs 7/8
30/01/2017 BoasprticasdeprogramaoemGenexusPortugus
DynamicFormWishList(wiki?19542,Dynamic+Form+Wish+List,)

R
(VIEWTUSER?
BYRCOPROC(VIEWTUSER?1220,)

1220,)
CREATED:9MAY200803:54PMLASTUPDATE:10MAY200808:11AMBYRCOPROC(VIEWTUSER?1220,)

http://wiki.genexus.com/commwiki/servlet/wiki?7698,Boas+pr%C3%A1ticas+de+programa%C3%A7%C3%A3o+em+Genexus+++Portugu%C3%AAs 8/8