<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Desarrollo de software Archivos | DVA Web</title>
	<atom:link href="https://dvaweb.mx/category/desarrollo-de-software/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Agencia de marketing digital y automatización con inteligencia artificial para PyMEs de habla hispana</description>
	<lastBuildDate>Fri, 03 Apr 2026 05:47:08 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
<site xmlns="com-wordpress:feed-additions:1">178796162</site>	<item>
		<title>Guía de Integración: vtiger CRM 7.2.0 y Google Calendar</title>
		<link>https://dvaweb.mx/google-calendar-vtiger-crm-configuracion/</link>
		
		<dc:creator><![CDATA[Iván Torres]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 05:47:06 +0000</pubDate>
				<category><![CDATA[CRM]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[crm vtiger]]></category>
		<category><![CDATA[integracion con google calendar con vtiger]]></category>
		<category><![CDATA[integracion de vtiger crm con google calendar]]></category>
		<category><![CDATA[Software CRM]]></category>
		<guid isPermaLink="false">https://dvaweb.mx/?p=217366</guid>

					<description><![CDATA[<p>Nota de publicación: Esta guía fue documentada en abril de 2026 como resultado de la implementación y corrección de la integración Google Calendar en vtiger CRM 7.2.0. Si estás leyendo este artículo en una fecha posterior, te recomendamos verificar que la API de Google Calendar y la versión de vtiger que usas sean compatibles con [&#8230;]</p>
<p>The post <a href="https://dvaweb.mx/google-calendar-vtiger-crm-configuracion/">Guía de Integración: vtiger CRM 7.2.0 y Google Calendar</a> appeared first on <a href="https://dvaweb.mx">DVA Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>Nota de publicación:</strong> Esta guía fue documentada en <strong>abril de 2026</strong> como resultado de la implementación y corrección de la integración Google Calendar en vtiger CRM 7.2.0. Si estás leyendo este artículo en una fecha posterior, te recomendamos verificar que la API de Google Calendar y la versión de vtiger que usas sean compatibles con los procedimientos aquí descritos, ya que las APIs de Google evolucionan con frecuencia.</p>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Introducción</h2>



<p>vtiger CRM 7.2.0 incluye de serie un módulo llamado <strong>Google</strong> que permite sincronizar el Calendario de vtiger con Google Calendar. En teoría funciona &#8220;out of the box&#8221;, pero en la práctica tiene varios problemas que impiden que funcione correctamente en instalaciones reales:</p>



<ul class="wp-block-list">
<li>La API de Google Contacts v2 fue <strong>descontinuada en junio de 2022</strong> y su uso causa errores HTTP 500 fatales.</li>



<li>El sync inicial arranca desde <strong>10 años atrás</strong>, lo que genera cientos de eventos históricos innecesarios.</li>



<li>El botón de sincronización recarga toda la página en lugar de mostrar solo una notificación.</li>



<li>El <code>syncToken</code> puede quedar fijado en el pasado reciente, dejando el sync sin eventos.</li>



<li>Bugs en <code>getSyncUsers()</code> que leen la columna incorrecta de la base de datos.</li>
</ul>



<p>En esta guía documentamos todos los pasos necesarios para tener la integración funcionando de forma bidireccional en vtiger CRM 7.2.0, con Google Calendar API v3 y OAuth2.</p>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Requisitos previos</h2>



<ul class="wp-block-list">
<li>vtiger CRM 7.2.0 instalado en servidor Linux con PHP 7.x</li>



<li>Cuenta de Google con acceso a Google Cloud Console</li>



<li>Acceso SSH y phpMyAdmin (o acceso directo a MySQL) en el servidor</li>



<li>El módulo Google activo en vtiger</li>
</ul>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Paso 1 — Configurar Google Cloud Console</h2>



<h3 class="wp-block-heading">1.1 Activar la Google Calendar API</h3>



<ol class="wp-block-list">
<li>Ve a <strong>Google Cloud Console → APIs y servicios → Biblioteca</strong></li>



<li>Busca <strong>Google Calendar API</strong> y actívala</li>



<li><strong>No actives Google People API ni Google Contacts API</strong> — la API de Contacts v2 está descontinuada y causará errores fatales en vtiger</li>
</ol>



<h3 class="wp-block-heading">1.2 Crear credenciales OAuth2</h3>



<ol class="wp-block-list">
<li>Ve a <strong>APIs y servicios → Credenciales → Crear credenciales → ID de cliente OAuth 2.0</strong></li>



<li>Tipo de aplicación: <strong>Aplicación web</strong></li>



<li>En <strong>URIs de redireccionamiento autorizados</strong> agrega la URL de tu instalación vtiger:<br><code>https://tudominio.com/index.php?module=Google&amp;view=Authenticate&amp;service=Google</code></li>



<li>Descarga o copia el <strong>Client ID</strong> y <strong>Client Secret</strong></li>
</ol>



<h3 class="wp-block-heading">1.3 Configurar la pantalla de consentimiento OAuth</h3>



<p>Este paso es crítico y frecuentemente se omite:</p>



<ol class="wp-block-list">
<li>Ve a <strong>APIs y servicios → Pantalla de consentimiento OAuth</strong></li>



<li>Estado de publicación: déjalo en <strong>&#8220;En pruebas&#8221; (Testing)</strong> si no necesitas que otros usuarios autoricen la app</li>



<li>En <strong>Usuarios de prueba</strong>, agrega el correo de la cuenta Google que usará vtiger para sincronizar</li>
</ol>



<p>&#x26a0;&#xfe0f; Sin este paso, el flujo OAuth devolverá error <code>403 access_denied</code> al intentar autorizar.</p>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Paso 2 — Configurar las credenciales en vtiger</h2>



<p>Edita el archivo <code>modules/Google/connectors/Config.php</code>:</p>



<pre class="wp-block-code"><code>&lt;?php
Class Google_Config_Connector {
    static $clientId     = 'TU_CLIENT_ID.apps.googleusercontent.com';
    static $clientSecret = 'TU_CLIENT_SECRET';
}</code></pre>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Paso 3 — Correcciones de código necesarias</h2>



<p>El módulo Google de vtiger 7.2.0 tiene varios bugs que deben corregirse manualmente.</p>



<h3 class="wp-block-heading">3.1 Deshabilitar Google Contacts (API descontinuada)</h3>



<p>Archivo: <code>modules/Google/views/Sync.php</code></p>



<p>Busca la línea donde se define el array de módulos a sincronizar y elimina <code>'Contacts'</code>:</p>



<pre class="wp-block-code"><code>// ANTES (causa HTTP 500 — API descontinuada en 2022)
$modules = array('Contacts', 'Calendar');

// DESPUÉS
$modules = array('Calendar');</code></pre>



<p>En el mismo archivo, asegúrate de capturar cualquier excepción PHP 7 correctamente:</p>



<pre class="wp-block-code"><code>try {
    $records = $this-&gt;invokeExposedMethod($sourceModule);
    return $records;
} catch (Zend_Gdata_App_HttpException $e) {
    error_log('&#91;GCAL] Zend exception: ' . $e-&gt;getMessage());
    return array();
} catch (Throwable $e) {
    error_log('&#91;GCAL] Error en sync: ' . get_class($e) . ' - ' . $e-&gt;getMessage());
    return array();
}</code></pre>



<h3 class="wp-block-heading">3.2 Fix en getSyncUsers() — columna incorrecta</h3>



<p>Archivo: <code>modules/Google/helpers/Utils.php</code></p>



<p>La función <code>getSyncUsers()</code> intentaba leer la columna <code>id</code> cuando el campo correcto es <code>userid</code>:</p>



<pre class="wp-block-code"><code>// ANTES
$userId = $resultrow&#91;'id'];

// DESPUÉS
$userId = $resultrow&#91;'userid'];</code></pre>



<h3 class="wp-block-heading">3.3 Cambiar el punto de inicio del sync a -30 días</h3>



<p>Archivo: <code>modules/Google/connectors/Vtiger.php</code></p>



<p>Por defecto, el sync inicial de WSAPP comienza desde <strong>10 años atrás</strong>. Con cientos de eventos históricos, el proceso nunca llega a los eventos recientes. El fix es sobrescribir <code>intialSync()</code>:</p>



<pre class="wp-block-code"><code>public function intialSync() {
    $registrationDetails = $this-&gt;registerWithTracker();
    $syncStateModel = new WSAPP_SyncStateModel();
    $syncStateModel-&gt;setSyncTrackerId($registrationDetails&#91;'key'])
                   -&gt;setSyncToken(strtotime('-30 days'))
                   -&gt;setType($this-&gt;getSynchronizeController()-&gt;getSourceType());
    return $syncStateModel;
}</code></pre>



<h3 class="wp-block-heading">3.4 Filtro de fechas en el connector de Calendar</h3>



<p>Archivo: <code>modules/Google/connectors/Calendar.php</code> — función <code>transformToTargetRecord()</code></p>



<p>Agrega un filtro para ignorar eventos con más de 30 días de antigüedad:</p>



<pre class="wp-block-code"><code>$cutoffTimestamp = strtotime('-30 days');
foreach ($vtEvents as $vtEvent) {
    if ($vtEvent-&gt;getMode() != WSAPP_SyncRecordModel::WSAPP_DELETE_MODE) {
        $startDate = $vtEvent-&gt;get('date_start');
        $dueDate   = $vtEvent-&gt;get('due_date');
        $eventDate = !empty($dueDate) ? $dueDate : $startDate;
        if (!empty($eventDate) &amp;&amp; strtotime($eventDate) &lt; $cutoffTimestamp) {
            continue; // Ignorar eventos históricos
        }
    }
    // ... resto del procesamiento
}</code></pre>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Paso 4 — Autorizar OAuth2 en vtiger</h2>



<ol class="wp-block-list">
<li>Inicia sesión en vtiger con el usuario que usará la sincronización</li>



<li>Ve a <strong>Configuración → Extensiones → Google</strong></li>



<li>Haz clic en <strong>Autenticar con Google</strong> — se abrirá un popup OAuth</li>



<li>Autoriza con la cuenta Google que agregaste como usuario de prueba en Cloud Console</li>



<li>En la tabla de módulos, fila <strong>Calendario</strong>:
<ul class="wp-block-list">
<li><strong>Google Datos</strong>: selecciona el calendario de Google destino</li>



<li><strong>Habilitar sincronización</strong>: actívalo</li>



<li><strong>Dirección</strong>: &#8220;Sincroniza en ambas direcciones&#8221;</li>
</ul>
</li>



<li>Guarda la configuración</li>
</ol>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Paso 5 — Tablas de base de datos relevantes</h2>



<p>Estas son las tablas que gestiona la integración, útiles para diagnóstico:</p>



<figure class="wp-block-table"><table><thead><tr><th>Tabla</th><th>Contenido</th></tr></thead><tbody><tr><td><code>vtiger_google_oauth2</code></td><td>Tokens OAuth2 por usuario (access_token, refresh_token)</td></tr><tr><td><code>vtiger_google_sync_settings</code></td><td>Configuración por usuario: calendario destino, dirección, habilitado</td></tr><tr><td><code>vtiger_google_sync</code></td><td>Último tiempo de sync por módulo y usuario</td></tr><tr><td><code>vtiger_google_event_calendar_mapping</code></td><td>Mapa entre IDs de eventos Google y el calendario donde se insertaron</td></tr><tr><td><code>vtiger_wsapp_sync_state</code></td><td>Estado del tracker WSAPP: almacena el syncToken (timestamp del último sync)</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Paso 6 — Reset del sync (cuando no sincroniza nada)</h2>



<p>Si el botón de sincronización no envía eventos a Google, el problema más común es que el <code>syncToken</code> en <code>vtiger_wsapp_sync_state</code> tiene una fecha muy reciente. Al arrancar, WSAPP busca eventos modificados <em>después</em> de ese timestamp y no encuentra nada nuevo.</p>



<p>Para diagnosticarlo, ejecuta en phpMyAdmin:</p>



<pre class="wp-block-code"><code>SELECT
  JSON_EXTRACT(stateencodedvalues, '$.synctoken') AS synctoken,
  FROM_UNIXTIME(JSON_EXTRACT(stateencodedvalues, '$.synctoken')) AS fecha_sync
FROM vtiger_wsapp_sync_state
WHERE name = 'Vtiger_GoogleCalendar';</code></pre>



<p>Si la <code>fecha_sync</code> corresponde a hoy o a un momento muy reciente y no hay eventos nuevos desde entonces, ejecuta el reset:</p>



<pre class="wp-block-code"><code>DELETE FROM vtiger_wsapp_sync_state WHERE name = 'Vtiger_GoogleCalendar';
DELETE FROM vtiger_google_event_calendar_mapping;
DELETE FROM vtiger_google_sync WHERE googlemodule = 'Calendar';</code></pre>



<p>Después del reset, al presionar <strong>Sincronizar con Google</strong>, el sistema ejecutará <code>intialSync()</code> fijando el punto de partida en <strong>-30 días</strong> y procesará todos los eventos del último mes.</p>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Diagnóstico por logs del servidor</h2>



<p>En servidores con Plesk, los logs de PHP van al error log de Apache vía <code>proxy_fcgi</code>. Para filtrar solo los mensajes del módulo Google:</p>



<pre class="wp-block-code"><code>grep "DVA_GCAL\|DVA_WSAPP\|DVA_SYNC" /var/www/vhosts/tudominio.com/logs/tucrm/error_log | tail -50</code></pre>



<p>Los mensajes de debug más útiles son:</p>



<ul class="wp-block-list">
<li><code>[DVA_WSAPP_PULL] sourceRecords from vtiger: 0</code> → el sync token está fijado en un momento muy reciente, hacer reset</li>



<li><code>[DVA_GCAL_PUSH] inserted OK, google_id: ...</code> → evento insertado correctamente en Google Calendar</li>



<li><code>[DVA_GCAL_PUSH] EXCEPTION</code> → error al insertar, revisar permisos OAuth o calendarId</li>
</ul>



<hr class="wp-block-separator has-css-opacity"/>



<h2 class="wp-block-heading">Conclusión</h2>



<p>La integración de vtiger CRM 7.2.0 con Google Calendar es funcional una vez aplicadas las correcciones descritas. Los puntos clave a recordar son:</p>



<ul class="wp-block-list">
<li>&#x26d4; Deshabilitar Google Contacts — la API v2 está descontinuada desde 2022</li>



<li>&#x1f504; Limitar el sync inicial a -30 días para evitar procesar historia innecesaria</li>



<li>&#x1f511; La pantalla de consentimiento OAuth debe tener el correo del usuario como &#8220;usuario de prueba&#8221;</li>



<li>&#x1f5c4;&#xfe0f; Si el sync deja de funcionar, el primer diagnóstico es revisar el <code>syncToken</code> en <code>vtiger_wsapp_sync_state</code></li>
</ul>



<p>Esta configuración fue implementada y documentada en <strong>abril de 2026</strong> sobre vtiger CRM 7.2.0. Si tienes dudas o encuentras cambios en versiones posteriores, puedes contactarnos en <a href="https://dvaweb.mx">dvaweb.mx</a>.</p>


<div class="yoast-breadcrumbs"><span><span><a href="https://dvaweb.mx/">Inicio</a></span> » <span class="breadcrumb_last" aria-current="page">Desarrollo de software</span></span></div>

<p>The post <a href="https://dvaweb.mx/google-calendar-vtiger-crm-configuracion/">Guía de Integración: vtiger CRM 7.2.0 y Google Calendar</a> appeared first on <a href="https://dvaweb.mx">DVA Web</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">217366</post-id>	</item>
		<item>
		<title>Vtiger 8.2: fix del error 500 en Reportes por variable estática duplicada en ReportRun.php</title>
		<link>https://dvaweb.mx/vtiger-8-2-fix-del-error-500-en-reportes-por-variable-estatica-duplicada-en-reportrun-php/</link>
		
		<dc:creator><![CDATA[Iván Torres]]></dc:creator>
		<pubDate>Sat, 08 Nov 2025 17:20:41 +0000</pubDate>
				<category><![CDATA[datos]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Tecnología]]></category>
		<category><![CDATA[Error 500 en reportes de vtiger 8.2]]></category>
		<category><![CDATA[vtiger 8.2]]></category>
		<category><![CDATA[vtiger crm]]></category>
		<guid isPermaLink="false">https://dvaweb.mx/?p=217299</guid>

					<description><![CDATA[<p>Cuando algunos proyectos de vtiger 8.2 corren sobre PHP 8.x, el módulo Reportes puede caer en un HTTP 500 apenas se abre la lista. El log muestra algo como: PHP Fatal error:&#160; Duplicate declaration of static variable $mod_query_detailsin modules/Reports/ReportRun.php on line XXXX A continuación te explico síntomas, causa y solución (con snippet listo para copiar/pegar). [&#8230;]</p>
<p>The post <a href="https://dvaweb.mx/vtiger-8-2-fix-del-error-500-en-reportes-por-variable-estatica-duplicada-en-reportrun-php/">Vtiger 8.2: fix del error 500 en Reportes por variable estática duplicada en ReportRun.php</a> appeared first on <a href="https://dvaweb.mx">DVA Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Cuando algunos proyectos de <strong>vtiger 8.2</strong> corren sobre <strong>PHP 8.x</strong>, el módulo <strong>Reportes</strong> puede caer en un <strong>HTTP 500</strong> apenas se abre la lista. El log muestra algo como:</p>



<p>PHP Fatal error:&nbsp; Duplicate declaration of static variable $mod_query_details<br>in modules/Reports/ReportRun.php on line XXXX</p>



<p>A continuación te explico <strong>síntomas, causa y solución</strong> (con snippet listo para copiar/pegar).</p>



<p><strong>Síntomas</strong></p>



<ul class="wp-block-list">
<li>Al entrar a <strong>Reportes</strong>: pantalla en blanco o <em>HTTP ERROR 500</em>.</li>



<li>En el log de PHP (/var/www/html/logs/php_error.log) aparece <strong>Duplicate declaration of static variable $mod_query_details</strong>.</li>
</ul>



<p>Si aún no tienes logs, activa en config.inc.php:</p>



<p>ini_set(&#8216;display_errors&#8217;, 0);<br>ini_set(&#8216;log_errors&#8217;, 1);<br>ini_set(&#8216;error_log&#8217;, __DIR__ . &#8216;/logs/php_error.log&#8217;);</p>



<p><strong>Causa</strong></p>



<p>Dentro de la función GenerateReport() (archivo modules/Reports/ReportRun.php) se dejó <strong>más de una</strong> línea con:</p>



<p>static $mod_query_details = array(); // o []</p>



<p>En <strong>PHP 8.x</strong>, declarar dos veces la misma <strong>variable estática</strong> dentro de la <strong>misma función</strong> es <strong>fatal</strong>.</p>



<p><strong>Solución (2–3 minutos)</strong></p>



<ol class="wp-block-list">
<li><strong>Respalda el archivo</strong></li>
</ol>



<p>cp modules/Reports/ReportRun.php modules/Reports/ReportRun.php.bak</p>



<ol class="wp-block-list">
<li><strong>Edita </strong>modules/Reports/ReportRun.php y ve a la función GenerateReport().</li>



<li><strong>Deja una sola</strong> línea de inicialización estática y <strong>elimina las repetidas</strong>.<br>Debe quedar <strong>solamente</strong> la primera:</li>
</ol>



<p>// dentro de GenerateReport()<br>static $mod_query_details = [];<br>// &#8230; resto del código &#8230;</p>



<p>Si encuentras otras variables estáticas duplicadas dentro de la misma función</p>



<p>(por ejemplo $mod_fields, $modules_query, etc.), aplica el mismo criterio:</p>



<p><strong>una sola</strong> declaración static por variable y por función.</p>



<ol class="wp-block-list">
<li><strong>Guarda y reinicia</strong> el servicio web (o el contenedor).</li>
</ol>



<p>service apache2 restart<br># o<br>docker restart &lt;nombre_del_contenedor_web&gt;</p>



<ol class="wp-block-list">
<li><strong>Verifica</strong></li>
</ol>



<ul class="wp-block-list">
<li>Abre <strong>Reportes</strong> de nuevo.</li>



<li>Revisa el log: tail -n 50 logs/php_error.log.<br>No debería reaparecer el fatal.</li>
</ul>



<p><strong>Snippet orientativo (cómo debe verse)</strong></p>



<p>function GenerateReport(/* &#8230; */) {<br>&nbsp;&nbsp;&nbsp; // ✔ Solo una declaración estática<br>&nbsp;&nbsp;&nbsp; static $mod_query_details = [];</p>



<p>// Lógica de armado de queries&#8230;<br>&nbsp;&nbsp;&nbsp; // $mod_query_details[&#8216;Accounts&#8217;] = &#8216;SELECT &#8230;&#8217;;<br>&nbsp;&nbsp;&nbsp; // &#8230;<br>}</p>



<p><strong>Buenas prácticas relacionadas</strong></p>



<ul class="wp-block-list">
<li><strong>Mantén los logs activos</strong> (sin mostrarlos en pantalla) para detectar rápido errores en PHP 8.x.</li>



<li>Si usas <strong><a href="https://stackify.com/php-monolog-tutorial/">Monolog 2.x</a></strong> y tu wrapper de logger llama métodos antiguos (getLogLevel()), actualiza a isHandling()/getLevel() para evitar fatales.</li>



<li>Antes de actualizar de PHP 7.x a 8.x, <strong>corre un grep</strong> para detectar posibles duplicados:<br><br>grep -nE &#8220;static\s+\$[a-zA-Z0-9_]+\s*=&#8221; modules/Reports/ReportRun.php</li>
</ul>



<p><strong>Conclusión</strong></p>



<p>Este fix es simple pero crítico: <strong>una única declaración static por variable dentro de la función</strong>. Con eso el <strong>módulo Reportes vuelve a funcionar</strong> en <a href="https://www.vtiger.com/">Vtiger</a> 8.2 bajo <a href="https://www.php.org/">PHP</a> 8.x y evitas caídas 500 difíciles de rastrear.</p>
<p>The post <a href="https://dvaweb.mx/vtiger-8-2-fix-del-error-500-en-reportes-por-variable-estatica-duplicada-en-reportrun-php/">Vtiger 8.2: fix del error 500 en Reportes por variable estática duplicada en ReportRun.php</a> appeared first on <a href="https://dvaweb.mx">DVA Web</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">217299</post-id>	</item>
		<item>
		<title>Buenas prácticas para el desarrollo de código Java</title>
		<link>https://dvaweb.mx/buenas-practicas-para-el-desarrollo-de-codigo-java/</link>
		
		<dc:creator><![CDATA[Iván Torres]]></dc:creator>
		<pubDate>Thu, 19 Oct 2023 01:58:31 +0000</pubDate>
				<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Buenas prácticas de programación]]></category>
		<category><![CDATA[Código]]></category>
		<category><![CDATA[Código JAVA]]></category>
		<category><![CDATA[Java]]></category>
		<guid isPermaLink="false">https://dvaweb.mx/?p=216961</guid>

					<description><![CDATA[<p>Son una serie de recomendaciones que ayudan a escribir código JAVA más limpio, legible y mantenible. Estas prácticas se basan en la experiencia de los desarrolladores y en los principios de la ingeniería de software.</p>
<p>The post <a href="https://dvaweb.mx/buenas-practicas-para-el-desarrollo-de-codigo-java/">Buenas prácticas para el desarrollo de código Java</a> appeared first on <a href="https://dvaweb.mx">DVA Web</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Las buenas prácticas para el desarrollo de código Java son una serie de recomendaciones que ayudan a escribir código más limpio, legible y mantenible. Estas prácticas se basan en la experiencia de los desarrolladores y en los principios de la ingeniería de software.</p>



<p><strong>Convención de nomenclatura</strong></p>



<p>La convención de nomenclatura es una de las prácticas más importantes para el desarrollo de código Java y una buena convención de nomenclatura ayuda a que el código sea más legible y fácil de entender.</p>



<p><strong>Algunos consejos para la convención de nomenclatura son:</strong></p>



<ul class="wp-block-list">
<li>Utilizar nombres descriptivos que reflejen la función del elemento de código.</li>



<li>Utilizar nombres consistentes a lo largo del código.</li>



<li>Evitar el uso de abreviaturas y acrónimos.</li>
</ul>



<p><strong>Organización del código</strong></p>



<p>Es por eso que la organización del código es otra práctica importante para el desarrollo de código Java. Un código bien organizado es más fácil de entender y mantener, es entonces cuando te podrías ver beneficiado si todo el equipo de trabajo programa bajo una misma convención.</p>



<p><strong>Algunos consejos para la organización del código son:</strong></p>



<ul class="wp-block-list">
<li>Utilizar un diseño modular que divida el código en unidades más pequeñas y manejables.</li>



<li>Utilizar un estilo de codificación consistente.</li>



<li>Documentar el código adecuadamente.</li>
</ul>



<p><strong>Ejemplos de buenas prácticas</strong></p>



<p>A continuación se presentan algunos ejemplos de buenas prácticas para el desarrollo de código Java:</p>



<ul class="wp-block-list">
<li>Utilizar comentarios para explicar el propósito del código.</li>



<li>Evitar el uso de código duplicado.</li>



<li>Utilizar un lenguaje claro y conciso.</li>



<li>Probar el código adecuadamente.</li>
</ul>



<p><strong>Conclusión</strong></p>



<p>Las buenas prácticas para el desarrollo de código Java son una herramienta valiosa para los desarrolladores. Al seguir estas prácticas, los desarrolladores pueden escribir código más limpio, legible y mantenible.</p>



<p><strong>Recursos adicionales</strong></p>



<ul class="wp-block-list">
<li>Guía de estilo de codificación Java: https://google.github.io/styleguide/javaguide.html</li>



<li>Effective Java: https://www.amazon.com/Effective-Java-3rd-Joshua-Bloch/dp/0134685997</li>



<li>Clean Code: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882</li>
</ul>
<p>The post <a href="https://dvaweb.mx/buenas-practicas-para-el-desarrollo-de-codigo-java/">Buenas prácticas para el desarrollo de código Java</a> appeared first on <a href="https://dvaweb.mx">DVA Web</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">216961</post-id>	</item>
	</channel>
</rss>
