Академический Документы
Профессиональный Документы
Культура Документы
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
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