Views

...

Important:

Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog podem ser tratados como consultoria freelance.

E-mails

Deixe seu e-mail para receber atualizações...

eBook Promo

Mostrando postagens com marcador code. Mostrar todas as postagens
Mostrando postagens com marcador code. Mostrar todas as postagens

VBA Advanced - Refatoração do código - Code Refactoring

Inline image 1
A experiência que acumulamos desenvolvendo inúmeras aplicações para as mais diversas necessidades de diferentes Clientes, com o passar do tempo, torna-nos melhores desenvolvedores refletindo no resultado que apresentamos. O aprofundamento em uma linguagem, tecnologia, conceito finda por nos tornar mais aptos para o implemento de modelos lógicos, os nossos algoritmos.

Sem mais blábláblá.... O que é Code Refactoring?
Refatoração é o processo de melhoria do seu código depois que ele foi escrito. Alteramos a estrutura interna do nosso código sem alterar o comportamento externo dele. Em linhas gerais, a refatoração ocorre quando mudamos o código, mas não alteramos o comportamento deste. O objetivo é torná-lo melhor, mas caso algo errado seja implementado, ainda assim será uma refatoração.

O aperfeiçoamento do código:

Minimizará as chances de falhas

Tornará o código mais fácil de entender e modificar

Permitirá a melhoria de programas difíceis de ler e por conseqüência difíceis de modificar.

A refatoração incluirá o uso de comentários e a documentação dos projetos favorecendo o entendimento e futuras modificações.

Evitará o desenvolvimento de lógica duplicada, por nome ou outros entendimentos e códigos com lógicas condicionais complexas.

Ao programar, o desenvolvedor terá uma aplicação que rode normalmente, mas que é difícil de entender por uma deficiência de código qualquer. A refatoração deve necessariamente ajudar a tornar o código mais legível, corrigindo deficiências estruturais.

A refatoração não deve ter o seu tempo alocado em cronogramas, essa função tem de ser habitual ao programador. Algumas regras devem ser seguidas:

Refatorar quando acrescentar novas funções

Refatorar quando necessitar consertar falhas

Refatorar quando revisar o código

Indireção e Refatoração
A refatoração tende a dividir métodos e objetos maiores em diversos outros menores, chamando isso de indireção. No entanto isso tem o seu lado bom e o ruim. O lado ruim é que cada vez que dividimos algo em várias partes, teremos conseqüentemente mais coisas para gerenciar. Tornando o programa mais difícil de ler. Por outro lado temos algus benefícios:

Compartilhamento de lógica: Um processo pode ser invocado em dois ou mais lugares diferentes.

Expõe intenção e implementação separadamente: Escolher o nome de cada parte do processo dá a oportunidade de explicarmos melhor o que pretendemos.

Isola alterações: O desenvolvedor usa um objeto em dois lugares diferentes e quer alterar o comportamento em um dos casos. Se alterar o objeto arrisca alterar o comportamento de ambos. Então, primeiro devemos criar um sub processo e fazer referencia a este.

Extract Method

Extract Method é uma das técnicas de refatoração propostas por Martin Fowler especialista em refactoring.

A técnica de extrair o método é bastante simples e pode causar uma melhoria significativa da leitura e organização de um código, basicamente a técnica consiste em decompor um rotina grande em métodos com código menores.


Por que refatorar?
Refatorar o software é uma técnica que pode (e deve) ser utilizada por diversas razões. 

Melhora o projeto: sem refatoração a estrutura interna de um software geralmente se degrada com as mudanças que ocorrem no decorrer do tempo. Programadores que nunca viram o código antes são encarregados de adicionar uma nova funcionalidade e provavelmente vão fugir um pouco do padrão que foi utilizado quando o software foi projetado. Aplicar refatoração após a adição dessa nova funcionalidade poderá deixá-la em conformidade com os padrões que foram utilizados nas outras funcionalidades que o software já possui;

Torna o software fácil de entender: desenvolvedores geralmente estão sempre com pouco tempo para terminar suas tarefas e entregar a funcionalidade pronta. Para conseguir entregar dentro do prazo, alguns acabam se apressando na hora de codificar, o que pode prejudicar a legibilidade (clareza do código) e alguns bugs podem passar despercebidos. Erros comuns são: não nomear as variáveis corretamente, não comentar, duplicar código, colocar métodos em classes inadequadas, entre outros. Ao empregar a refatoração, muito provavelmente, tais sujeiras serão removidas do código, o que o tornará muito mais fácil de compreender e manter;

Ajuda a achar bugs: quando um desenvolvedor vai refatorar certo código, ele deve entender exatamente o que aquele código está fazendo. Entendendo muito bem o seu funcionamento, os possíveis bugs existentes naquele código acabam se tornando evidentes. Como o desenvolvedor já está alterando o código, recomenda-se também eliminar o bug;

Ajuda a programar mais rápido: com todas as vantagens citadas até agora, pode-se notar que quando a refatoração é aplicada por uma pessoa que tem domínio sobre a técnica, a qualidade do software aumenta e o código fica mais fácil de entender. Assim, quando um desenvolvedor pega o código para adicionar uma nova funcionalidade e consegue compreendê-lo mais rapidamente, o processo de desenvolvimento também ocorre de maneira mais rápida e tranquila.

Um dos livros mais importantes sobre refatoração é Refactoring: Improving the Design of Existing Code (ISBN 0-201-48567-2) de Martin Fowler, onde são explicados os conceitos, motivações e uma série de refatorações descritas passo a passo.

As refatorações descritas no livro de Martin Fowler utilizam fortemente conceitos de orientação a objeto.

Basta observar algumas:

Extrair Método (Extract Method)
Mover Método (Move Method)
Mover Atributo (Move Field')
Extrair Classe (Extract Class)
Encapsular Atributo (Encapsulate Field)
Renomear Método (Rename Method)
Subir Método (Pull Up Method)
Subir Atributo (Pull Up Field)
Descer Método (Push Down Method)
Descer Atributo (Push Down Field)
Extrair Sub-classe (Extract Subclass)
Extrair Super-classe (Extract Superclass)

Referência:

Kent Beck

Tags: VBA, Tips, refactoring, refatoração, Code, código, indireção, 

VBA Tips - Determina o tipo de conexão ativa - Determine Network Connection Type




A cada dia que passa é mais freqüente o uso de dados online oriundos de servidores na Web. Estes são automaticamente transformados em informações ao atualizarem os nossos Dashboards e Scorecards instantâneamente.

Para garantirmos que tais dados receberão as atualizações corretas no tempo apropriado é importante checarmos a conexão das nossas máquinas constantemente. A API InternetGetConnectedState declarada no wininet.dll retorna o estado da conexão do sistema local. A API é simples de usar, e retorna TRUE se houver uma conexão com a Internet.
As funções abaixo são muito úteis para garantir a validade de processos com este perfil:

IsNetConnectViaLAN

IsNetConnectViaModem

IsNetConnectViaProxy

IsNetConnectOnline

IsNetRASInstalled

GetNetConnectString


Inline image 2

Divirta-se com o código abaixo, colando-o inteiramente num novo módulo da sua aplicação.


Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2011 VBnet/ Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce
'               or publish this code on any web site,
'               online service, or distribute as source
'               on any media without express permission.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare Function InternetGetConnectedState Lib "wininet" _
  (ByRef dwflags As Long, _
   ByVal dwReserved As Long) As Long

'Local system uses a modem to connect to the Internet.
Private Const INTERNET_CONNECTION_MODEM As Long = &H1

'Local system uses a LAN to connect to the Internet.
Private Const INTERNET_CONNECTION_LAN As Long = &H2

'Local system uses a proxy server to connect to the Internet.
Private Const INTERNET_CONNECTION_PROXY As Long = &H4

'No longer used.
Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8

Private Const INTERNET_RAS_INSTALLED As Long = &H10
Private Const INTERNET_CONNECTION_OFFLINE As Long = &H20
Private Const INTERNET_CONNECTION_CONFIGURED As Long = &H40

Private Sub Command1_Click()
   Let Text1.Text = IsNetConnectViaLAN()
   Let Text2.Text = IsNetConnectViaModem()
   Let Text3.Text = IsNetConnectViaProxy()
   Let Text4.Text = IsNetConnectOnline()
   Let Text5.Text = IsNetRASInstalled()
   Let Text6.Text = GetNetConnectString()
End Sub

Function IsNetConnectViaLAN() As Boolean
   Dim dwflags As Long
   
  'pass an empty variable into which the API will
  'return the flags associated with the connection
   Call InternetGetConnectedState(dwflags, 0&)

  'return True if the flags indicate a LAN connection
   IsNetConnectViaLAN = dwflags And INTERNET_CONNECTION_LAN
End Function

Function IsNetConnectViaModem() As Boolean
   Dim dwflags As Long
   
  'pass an empty variable into which the API will
  'return the flags associated with the connection
   Call InternetGetConnectedState(dwflags, 0&)

  'return True if the flags indicate a modem connection
   Let IsNetConnectViaModem = dwflags And INTERNET_CONNECTION_MODEM
End Function

Function IsNetConnectViaProxy() As Boolean

   Dim dwflags As Long
   
  'pass an empty variable into which the API will
  'return the flags associated with the connection
   Call InternetGetConnectedState(dwflags, 0&)

  'return True if the flags indicate a proxy connection
   Let IsNetConnectViaProxy = dwflags And INTERNET_CONNECTION_PROXY
End Function

Function IsNetConnectOnline() As Boolean
  'no flags needed here - the API returns True
  'if there is a connection of any type
   Let IsNetConnectOnline = InternetGetConnectedState(0&, 0&)
End Function

Function IsNetRASInstalled() As Boolean
   Dim dwflags As Long
   
  'pass an empty variable into which the API will
  'return the flags associated with the connection
   Call InternetGetConnectedState(dwflags, 0&)

  'return True if the flags include RAS installed
   Let IsNetRASInstalled = dwflags And INTERNET_RAS_INSTALLED
End Function

Function GetNetConnectString() As String

   Dim dwflags As Long
   Dim msg As String

  'build a string for display
   If InternetGetConnectedState(dwflags, 0&) Then
     
      If dwflags And INTERNET_CONNECTION_CONFIGURED Then
         Let msg = msg & "Você tem uma conexão de rede configurada." & vbCrLf
      End If

      If dwflags And INTERNET_CONNECTION_LAN Then
         Let msg = msg & "O sistemas local conecta-se a Internet via LAN"
      End If
      
      If dwflags And INTERNET_CONNECTION_PROXY Then
         Let msg = msg & ", e usuários no Servidor de Proxy. "
      Else
         Let msg = msg & "."
      End If
      
      If dwflags And INTERNET_CONNECTION_MODEM Then
         Let msg = msg & "O sistema local usa um modem para conectar-se a Internet. "
      End If
      
      If dwflags And INTERNET_CONNECTION_OFFLINE Then
         Let msg = msg & "A conexão está offline. "
      End If
      
      If dwflags And INTERNET_CONNECTION_MODEM_BUSY Then
         Let msg = msg & "O sistema de Modem local está ocupado com uma conexão non-Internet. "
      End If
      
      If dwflags And INTERNET_RAS_INSTALLED Then
         Let msg = msg & "Serviço de Acesso Remoto instalado neste sistema."
      End If
      
   Else
    
      Let msg = "Não conectado a Internet agora."
      
   End If
   
   Let GetNetConnectString = msg
End Function




Tags: VBA, Tips, Network, Connection, Type, code, network, DLL, wininet.dll

eBooks VBA na AMAZOM.com.br

LinkWithinBrazilVBAExcelSpecialist

Related Posts Plugin for WordPress, Blogger...

Vitrine