PBtoWS - Procesos - Backend Powerbuilder (WS-SOAP) - Estándares de Desarrollo - Nomenclatura: Powerbuilder
Este capitulo contiene información relacionada con la nomenclatura de códificación para el lenguaje Powerbuilder, la cual ha sido definida por la organización.
Se implementará la nomenclatura estandar sugerida por sybase/SAP. La cual puede consultarse desde la url: http://www.pbdr.com/pbstd/varnmstd.htm
Organización de los Componentes
Todos los componentes que se definan en el proceso de migración y posteriomente en el legunaje Powerbuilder que sean expuestos en servicios SOAP por medio del framework PBtoWS SICOF deben seguir los siguientes lineamientos:
Tabla de Código de Aplicaciones
Aplicación | Prefijo |
Presupuesto | 01 |
Tesorería | 02 |
Contabilidad | 03 |
Compras | 04 |
Nómina | 05 |
Talento | 10 |
Core/Framework/Main | 00 |
Cualquier nueva aplicación que se defina y que impacte los componentes Backend debe ser definida en esta tabla.
Tipos de Librerías
Librerías Lanzadoras: Son las que exponen las operaciones de los servicios SOAP (Generan la estructura del WSDL).
Librerías Invocadoras: Contienen las clases que orquestan la ejecución de los procesos asociados a las operaciones de los servicios expuestos.
Librerías Modelo (Lógica del Negocio): Contiene las clases de la lógica del negocio.
Capas de Implementación
Capa Core: Capa relacionada con los procesos internos de ejecución. Por lo general está asociada a las operaciones del Framework.
Capa Controller: Capa relacionada con los procesos de orquestación de servicios.
Capa Model: Capa relacionada con los procesos de la lógica del negocio (código migrado).
Prefijos
ws: (WebService): Prefijo asociado a la exposición de servicios. Es utilizado por las librerías lanzadoras.
sf: (Software): Prefijo asociado a las librerias de implementación de los procesos y la exposición de los servicios.
Librerías
Se deben crear respetando las siguientes convenciones de acuerdo a la capa de implementación (se toma como ejemplo el componente Login):
Tipo Libreria | Prefijo | Código Aplicación | Capa de implementación | Nombre Componente | Ejemplo |
Lanzadora | ws | 00 | No Aplica | login | ws00_login.pbl |
Invocadora | sf | 00 | Controller | login | sf00controller_login.pbl |
Modelo | sf | 00 | Model | login | sf00model_login.pbl |
Observaciones
Todos los nombres de librerías deben ser en minuscula.
La capa de implementación de la libreria Lanzadora no aplica porque esa capa es gestionada automaticamente por powerbuilder al desplegar las operaciones de los servicios SOAP.
Los nombres pueden contener el separador _
Los nombres deben representar las funcionalidades contenidas, debe evitar acronimos.
Los nombres no deben estar duplicados incluso en otros proyectos.
Codificación
Calificadores de Alcance
Alcance | Prefijo | Ejemplo | Restricciones |
Argumento | a | al_variable | Ninguna |
Global | g | gl_variable | No permita en la implementación |
Instance | i | il_variable | Ninguna |
Local | l | ll_variable | Ninguna |
Shared | s | sl_variable | No permita en la implementación |
Calificadores de Alcance
Tipo Dato | Prefijo | Ejemplo | Observaciones |
Any | a | la_raw | Solo se puede utilizar en las librerias Modelo |
Blob | blb | lblb_image | Se recomienda hacer uso limitado de este tipo y solo en las librerías Modelo |
Boolean | b | lb_exit | |
Character | c | lc_letra | |
Date | d | ld_fecha | Evaluar el uso de este tipo en procesos que van a la base de datos. Se recomienda usar el tipo Datetime |
Datetime | dt | ldt_fecha | |
Decimal | dec | ldec_numero | |
Double | db | ldb_numero | |
Integer | i | li_numero | |
Long | l | ll_numero | |
Real | r | lr_numero | Se recomienda el uso del tipo Double |
String | s | ls_cadena | |
Time | t | lt_tiempo | Evaluar el uso de este tipo en procesos que van a la base de datos. Se recomienda usar el tipo Datetime |
Unsigned Integer | ui | lui_numero | |
Unsigned Long | ul | lul_numero | |
Prefijos de Tipo de Datos de Objetos Estándar
Tipo Dato | Prefijo | Código Aplicación | Ejemplo | Observaciones |
Application | ws | 00 | ws00_login | Solo para proyectos de exposición de servicios |
Application | app | 00 | app00_login | Solo para proyectos de consumo de servicios (Proxy) |
ClassDefinition | cldef | | lcldef_Object | |
ClassDefinitionObject | cldefo | | lcdefo_ThatObject | |
Connection | cn | | lcn_Known | |
ConnectionInfo | cni | | lcni_ServerInfo | |
ConnectObject | cno | | scno_ConObj | |
Datastore | ds | | lds_source | |
Datawindow Grid | dwg | | dwg_lista | Solo aplica para la definición del control (dataobject). No para utilización en la implementación (se usa datastore) |
Datawindow Free | dwf | | dwf_consulta | Solo aplica para la definición del control (dataobject). No para utilización en la implementación (se usa datastore) |
DynamicDescriptionArea | dda | | ldda_Execute | |
DynamicStagingArea | dsa | | ldsa_MyQuery | |
EnumerationDefinition | enum | | lenum_Cycle | |
EnumerationItemDefinition | enumi | | ienumi_Item | |
Environment | env | | lenv_System | |
Error | err | | gerr_Snarl | |
ExtObject | exto | | gexto_Outside | |
Function_Object | of | | of_Function | |
iNet | inet | | linet_Web | |
InternetResult | ir | | lir_Page | |
MailFileDescription | mfd | | lmfd_Mail | |
MailMessage | mm | | lmm_Mail | |
MailRecipient | mr | | lmr_Mail | |
MailSession | ms | | lms_Session | |
NonVisualObject | nvo | | lnvo_Invisible | |
OLEObject | oo | | loo_Ghost | |
OLEStorage | ostg | | gostg_WordFile | |
OLEStream | ostm | | lostm_River | |
OMObject | omo | | iomo_Bob | |
OMStorage | omstg | | somstg_Drive | |
OMStream | omstm | | lomstm_Mersey | |
PBtoCPPObject | pb2cpp | | lpb2cpp_Quad | |
Pipeline | pl | | lpl_OilandGas | |
Powerobject | po | | lpo_Source | |
ProfileCall | prc | | lprc_Face | |
ProfileClass | prcl | | lprcl_Room | |
ProfileLine | prl | | iprl_Bob | |
ProfileRoutine | prr | | lprr_Cat | |
Profiling | pr | | lpr_Outline | |
RemoteObject | ro | | iro_Employee | |
ScriptDefinition | sdef | | lsdef_Mycode | |
Service | srv | | lsrv_Charge | |
SimpleTypeDefinition | std | | istd_MyType | |
Structure | str | | lstr_Data | |
SystemFunctions | sf | | lsf_Bay | |
Timing | tmg | | ltmg_Clock | |
TraceActivityNode | tran | | ltran_Node | |
TraceBeginEnd | trbe | | ltrbe_Start | |
TraceError | tre | | ltre_Error | |
TraceFile | trf | | itrf_TraceFile | |
TraceGarbageCollect | trgc | | itrgc_Call | |
TraceLine | trln | | strln_Rope | |
TraceObject | tro | | ltro_Bob | |
TraceRoutine | trr | | ltrr_Tiger | |
TraceSQL | trsql | | ltrsql_MySQL | |
TraceTree | trt | | ltrt_Birch | |
TraceTreeError | trte | | ltrte_Err | |
TraceTreeGarbageCollect | trtgc | | ltrtgc_Trash | |
TraceTreeLine | trtl | | ltrtl_String | |
TraceTreeNode | trtn | | ltrtn_Kilt | |
TraceTreeObject | trto | | ltrto_Trace | |
TraceTreeRoutine | trtr | | ltrtr_BobGrimmer | |
TraceTreeUser | trtu | | ltrtu_User | |
TraceUser | tru | | ltru_Blue | |
Transaction | ts | | lts_Trans | |
TypeDefinition | typdef | | ltypdef_Details | |
UserObject | uo | | luo_Control | |
VariableCardinalityDefinition | vcd | | lvcd_Type | |
VariableDefinition | vd | | lvd_Sore | |
Observaciones
Convención de nombres de clases
Prefijos de clases
Clase | Prefijo | Código Aplicación | Ejemplo | Observaciones |
Standard Class User Object | n_ | | n_ds | Esta nomenclatura se puede ignorar si se mantiene el nombramiento de variables y calificadores de acceso Ej: lds_source para datastore |
Custom Class User Object | n_cst_ | | n_cst_customer | |
Global Structure | s_ | | s_point | |
Nombramiento de clases: Custom Class User Object
Tipo de Clase | Capa de Implementación | Prefijo | Ejemplo | Observaciones |
Controller | Controller | n_cst_controller_ | n_cst_controller_login | Se recomienda una sola implementación por componente |
Service | Controller | n_cst_service_ | n_cst_service_login | Se recomienda una sola implementación por componente |
Model | Model | n_cst_ | n_cst_login | Pueden existir varias clases modelo dependiendo de la complejidad del componente |
Observaciones
Convención de nombres de Tipos de Datawindows
Clase | Prefijo | Código Aplicación | Ejemplo | Observaciones |
Grid | dwg_ | | dwg_prueba | |
Free o para Filtros | dwf_ | | dwf_prueba | |
External | dwe_ | | dwe_prueba | |
Observaciones
Convención de nombres de funciones
Tipo | Prefijo | Código Aplicación | Ejemplo | Observaciones |
Function Object | of_ | | of_calcular_saldo | |
Function Set | set_ | | set_valor | |
Function Get | get_ | | get_valor | |
Observaciones
Recomendaciones:
La siguientes recomendaciones no imponen reglas de utilización sin embargo trate en lo posible de aplicarlas ya que el hacerlo optimiza el código generado:
Evite el uso de variables globales.
No utilice cursores en el código (utilice datastore).
Evite el uso de funciones globales (agrupelas en objetos no visuales).
Evite el uso de la tabla Dummy (utilice datawindows external).
Evite el uso de la función RowCount() en un bucle Ej: for i = 1 to ldwg_prueba.RowCount ya que implica un consumo excesivo de ram en su lugar asigne el valor una variable y utilicela en la definición del bucle.
Evite el uso del tipo de dato Date en su lugar utilice el tipo Datetime.
No debe utilizar el tipo de datos Any en la capa de implementacion controller, solo puede ser utilizado en la capa model ya que las conversiones implicitas pueden generar comportamientos indefinidos y excepciones en tiempo de ejecución.
El valor Nulo solo es permitido en las asignaciones implicitas setNull y en los valores de retornos de la base de datos.