SlideShare una empresa de Scribd logo
1 de 47
Monografia de Final de Curso




  Proposta de uma Arquitetura
para Customização de Sistemas
usando Mecanismos de Injeção
       de Dependência

          Aluno: Charles Wellington de Oliveira Fortes
                Orientador: Prof. Marco Túlio Valente
Proposta de uma Arquitetura para Customização de Sistemas usando   Introdução
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                  Independente de seu porte ou ramo de negócio, as
                                                                                                  empresas possuem necessidades particulares



                                                                                                              Estas particularidades são muitas vezes repassadas
                                                                                                                    aos softwares que lhes apóiam, seja criando
                                                                                                                softwares específicos ou adaptando funcionalidades de
                                                                                                                           softwares vendidos como produto ou serviço
Proposta de uma Arquitetura para Customização de Sistemas usando   Introdução
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                     Nesta monografia iremos focar nas formas como estas
                                                                                                     necessidades são inseridas nos
                                                                                                     softwares, caracterizando o que chamamos de
                                                                                                     customização de softwares



                                                                                                                     O que significa em resumo, inserir as funcionalidades
                                                                                                                     específicas de uma empresa em um software já existente
                                                                                                                     (COELHO, 2007)
Proposta de uma Arquitetura para Customização de Sistemas usando   Introdução
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                     Segundo Otávio P. Coelho – Arquiteto da Microsoft – em seu artigo sobre
                                                                                                          técnicas de customização de software os software (COELHO, 2007), a
                                                                                                      customização de softwares não se limita a introdução de
                                                                                                     modificações no sistema, ela acarreta uma série de complexidades
                                                                                                                e demanda um grande esforça de implementação.
Proposta de uma Arquitetura para Customização de Sistemas usando   Introdução
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                      “Quando realizada pela empresa fabricante do software, a
                                                                                                       customização pode ser, por vezes, uma fonte de
                                                                                                                   renda, por outras, de prejuízo.”
                                                                                                                                                      (COELHO, 2007)
Proposta de uma Arquitetura para Customização de Sistemas usando   Problema
                                            Mecanismos de Injeção de Dependência




                                                                                                  Mesmo em se tratando de empresas do mesmo
Monografia de Final de Curso




                                                                                                  ramo/setor, cada uma apresenta situações singulares
                                                                                                  decorrente de sua cultura
                                                                                                                        organizacional, fluxo de
                                                                                                  trabalho, especialização/diferencial dentre outros



                                                                                                                   Encontrar o melhor caminho para a adaptação de um
                                                                                                                              software de pouco
                                                                                                                                      impacto e de fácil
                                                                                                              desenvolvimento e manutenção tarefa que não
                                                                                                             vem sendo fácil para os arquitetos e engenheiros de
                                                                                                                                                            software
Proposta de uma Arquitetura para Customização de Sistemas usando   Objetivo Geral

                                                                                                                       Analisar as formas de customização utilizadas por
                                            Mecanismos de Injeção de Dependência



                                                                                                                                              algumas empresas do setor
Monografia de Final de Curso




                                                                                                     Propor uma alternativa de arquitetura que permita que um
                                                                                                      software seja adaptado com o mínimo de impacto em sua
                                                                                                     versão padrão, sendo que a adaptação é simples de ser feita e
                                                                                                                         fácil de ser mantida.
Proposta de uma Arquitetura para Customização de Sistemas usando   Objetivo Específico
                                            Mecanismos de Injeção de Dependência




                                                                                                   Pesquisar e comparar as formas utilizadas por diversas
Monografia de Final de Curso




                                                                                                   empresas de software para a adaptação de seus
                                                                                                   produtos, elicitando seus pontos positivos   e
                                                                                                   negativos.




                                                                                                                 Apresentar os resultados de qualidade e complexidade
                                                                                                            obtidos por empresas que utilizam as formas mais comuns de
                                                                                                                         adaptação de software e propor uma alternativa.
Proposta de uma Arquitetura para Customização de Sistemas usando   Objetivo Específico

                                                                                                   Abordar as técnicas e padrões utilizados na arquitetura
                                            Mecanismos de Injeção de Dependência




                                                                                                   proposta, sendo elas
Monografia de Final de Curso




                                                                                                           Inversão de Controle com Injeção de
                                                                                                           Dependência

                                                                                                           Reflexão computacional.



                                                                                                     Apresentar a arquitetura proposta e como desenvolvê-la.
Proposta de uma Arquitetura para Customização de Sistemas usando   Metodologia
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                   Pesquisa em materiais bibliográficos



                                                                                                                         Realização de pesquisa online sobre as formas
                                                                                                                         de customização adotadas




                                                                                                                   Aplicação prática em um projeto real
Proposta de uma Arquitetura para Customização de Sistemas usando   Leis da Evolução de Software
                                            Mecanismos de Injeção de Dependência                                          Referencial teórico
Monografia de Final de Curso




                                                                                                       Evoluções podem ser feitas para atender a demandas
                                                                                                            tecnológicas do ambiente (LEHMAN, 2000)



                                                                                                                                      ou as necessidades
                                                                                                                                      específicas de um cliente
                                                                                                                                      (COELHO, 2007).
Proposta de uma Arquitetura para Customização de Sistemas usando   Leis da Evolução de Software
                                            Mecanismos de Injeção de Dependência                                                    Referencial teórico
Monografia de Final de Curso




                                                                                                   Este processo resulta em um aumento da complexidade e queda
                                                                                                   da qualidade do código fonte, o que eleva os custos da
                                                                                                   manutenção do software, podendo ir de 40% do custo de
                                                                                                   desenvolvimento (BROOKS, 1995)




                                                                                                                             podendo inclusive excedê-los (SOMMERVILE, 2007).
Proposta de uma Arquitetura para Customização de Sistemas usando   Leis da Evolução de Software
                                            Mecanismos de Injeção de Dependência                                               Referencial teórico
Monografia de Final de Curso




                                                                                                    Durante o processo de alteração de um trecho do código fonte de um
                                                                                                           software, mesmo que para manutenções corretivas, esbarramos com a
                                                                                                       probabilidade de 20-50% de criar defeitos, além do aumento dos
                                                                                                          custos e necessidade de cobertura dos testes (BROOKS, 1995).
Proposta de uma Arquitetura para Customização de Sistemas usando   Padrões de Projetos
                                            Mecanismos de Injeção de Dependência                                            Referencial teórico
Monografia de Final de Curso




                                                                                                           Alexander (ALEXANDER, 1979) define que um
                                                                                                                                               padrão é uma
                                                                                                            solução para um problema em determinado
                                                                                                        contexto, podendo estes serem combinados para resolver um
                                                                                                                                                   problema complexo
Proposta de uma Arquitetura para Customização de Sistemas usando   Inversão de Controle
                                            Mecanismos de Injeção de Dependência                                             Referencial teórico
Monografia de Final de Curso




                                                                                                   foi proposta pois os módulos de alto nível não deveriam
                                                                                                   depender diretamente dos módulos de implementação.




                                                                                                               Passando assim a apontar estas dependências para
                                                                                                             abstrações e transpassar o controle a eles (MARTIN, 2000).
Proposta de uma Arquitetura para Customização de Sistemas usando   Inversão de Controle
                                            Mecanismos de Injeção de Dependência                                          Referencial teórico
Monografia de Final de Curso




                                                                                                                    Martin Fowler explica que a inversão de controle é
                                                                                                                    uma característica comum dos
                                                                                                                    frameworks, são um conjunto de “containers que
                                                                                                                    ajudam a montar componentes de projetos
                                                                                                                    diferentes em uma           aplicação coesa”
                                                                                                                    (FOWLER, 2004)
Proposta de uma Arquitetura para Customização de Sistemas usando   Injeção de Dependência
                                            Mecanismos de Injeção de Dependência                                            Referencial teórico
Monografia de Final de Curso




                                                                                                    a injeção de dependência passa a poder
                                                                                                    construir o objeto concreto na memória
                                                                                                    conforme o contexto de
                                                                                                    necessidade para aquela
                                                                                                    abstração
                                                                                                    (FOWLER, 2004)
Proposta de uma Arquitetura para Customização de Sistemas usando   Reflexão para Instanciação de Classes
                                            Mecanismos de Injeção de Dependência                                              Referencial teórico
Monografia de Final de Curso




                                                                                                         A reflexão computacional fornece objetos que encapsulam
                                                                                                         assemblies, módulos e tipos, e pode ser usada para criar
                                                                                                       instâncias de tipos dinamicamente, ligar o tipo a um objeto
                                                                                                     existente ou obter as definições de tipagem de um objeto existente
                                                                                                                                          (NET FRAMEWORK DEVELOPER'S GUIDE, 2010)
Proposta de uma Arquitetura para Customização de Sistemas usando   Pesquisa
                                            Mecanismos de Injeção de Dependência                                           Proposta de Arquitetura
Monografia de Final de Curso




                                                                                                            Distribuída de forma Online através do Google Docs



                                                                                                    Respondida por 36 profissionais de nível sênior atuantes na área de
                                                                                                    desenvolvimento ou arquitetura de software



                                                                                                                               Os profissionais representam uma única
                                                                                                                              empresa, localizadas nas cidades de Belo
                                                                                                                        Horizonte (MG), São Paulo (SP), Rio de Janeiro
                                                                                                                                               (RJ) e Porto Alegre (RS)
Proposta de uma Arquitetura para Customização de Sistemas usando   Pesquisa
                                            Mecanismos de Injeção de Dependência                                           Proposta de Arquitetura
Monografia de Final de Curso




                                                                                                    Tipos de Customização segundo (COELHO, 2007)

                                                                                                             Branchs: Cópia do código fonte pra cada cliente

                                                                                                             Versionamento: Generalização das customizações para
                                                                                                             atender a todos os clientes, como nova funcionalidade do
                                                                                                             software

                                                                                                             Fluxo condicional: Customização implementada no fonte
                                                                                                             mas acessada através de uma validação condicional do tipo
                                                                                                             if (condição) { [...] instruções [...]; }

                                                                                                             Uso de linguagem de programação: Uso de linguagem de
                                                                                                             programação específica do software para extensão.
Monografia de Final de Curso
Proposta de uma Arquitetura para Customização de Sistemas usando
             Mecanismos de Injeção de Dependência
                                                                                                         Pesquisa

                                                               Versionamento


                                         Incidência de erros
                                                                               Proposta de Arquitetura




                                         Impactos
                                         Complexidade
Proposta de uma Arquitetura para Customização de Sistemas usando   Pesquisa
                                                                                                                                         Proposta de Arquitetura

                                                                                                        Branchs
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                  Prós                                                   Contras
                                                                                                  O produto se torna mais atraente para o cliente        A complexidade aumenta com regras de negócios
                                                                                                  quando pode ser customizado à sua vontade.             específicas de cada customização.
                                                                                                  Redução do custo total de desenvolvimento do           Precisam ser feito mais testes e um longo processo de
                                                                                                  software e qualidade final é alta após processo de     QA. Mas a qualidade final é alta.
                                                                                                  QA.
                                                                                                  Mantém um possível problema isolado a um cliente É preciso manter várias versões de um mesmo código.
                                                                                                  específico.
                                                                                                  rápida entrega                                         difícil manutenção
                                                                                                  Cada cliente recebe o que solicitou.                   Um erro comum encontrado deverá ser corrigido nos
                                                                                                                                                         fontes de todos os clientes.
                                                                                                  Cada cliente é independente na customização do         Uma implementação feita em um cliente deve ser
                                                                                                  softaware.                                             replicada para todos os clientes caso se queira essa
                                                                                                                                                         funcionalidade.
                                                                                                  Facilidade de correção                                 Gerenciar muitas branchs
Monografia de Final de Curso
Proposta de uma Arquitetura para Customização de Sistemas usando
             Mecanismos de Injeção de Dependência
                                                                                                         Pesquisa

                                                               Versionamento


                                         Incidência de erros
                                         Impactos
                                                                               Proposta de Arquitetura




                                         Complexidade
Proposta de uma Arquitetura para Customização de Sistemas usando   Pesquisa
                                                                                                                                     Proposta de Arquitetura



                                                                                                      Versionamento
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                                     Prós                                              Contras

                                                                                                  Baixa complexidade do código fonte                 Clientes que necessitam de situações muito
                                                                                                                                                     específicas não são atendidos


                                                                                                  As novas funcionalidades ajudam na                 Funcionalidades que atendem a menos
                                                                                                  evolução do produto e com isto a                   clientes são implementadas por último
                                                                                                  conquistar mais clientes


                                                                                                  Facilidade de manutenção
Monografia de Final de Curso
Proposta de uma Arquitetura para Customização de Sistemas usando
             Mecanismos de Injeção de Dependência
                                                                                                               Pesquisa




                                         Incidência de erros
                                                               Fluxos Condicionais


                                         Impactos
                                                                                     Proposta de Arquitetura




                                         Complexidade
Proposta de uma Arquitetura para Customização de Sistemas usando   Pesquisa
                                                                                                                                Proposta de Arquitetura



                                                                                                    Fluxos Condicionais
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                                       Prós                                       Contras

                                                                                                    Facilidade de Implementar                 Dificuldade de controlar os recursos específicos
                                                                                                                                              e gerais

                                                                                                    Entrega rápida                            Dificuldade de gerenciamento e rastreabilidade
                                                                                                                                              dos requisitos e testes


                                                                                                                                              Erros afetam um grande numero de clientes
Monografia de Final de Curso
Proposta de uma Arquitetura para Customização de Sistemas usando
             Mecanismos de Injeção de Dependência
                                                                                                                           Pesquisa




                                         Incidência de erros
                                                               Uso de linguagem de programação


                                         Impactos
                                                                                                 Proposta de Arquitetura




                                         Complexidade
Proposta de uma Arquitetura para Customização de Sistemas usando   Pesquisa
                                                                                                                                      Proposta de Arquitetura



                                                                                                    Uso de linguagem de programação
                                            Mecanismos de Injeção de Dependência




                                                                                                                        Prós                                                  Contras
Monografia de Final de Curso




                                                                                                  Adequação a regra de negocio do cliente.               Dificuldade de manutenção.


                                                                                                  Maior facilidade de implementação                      Pela facilidade de se customizar, esse modelo é
                                                                                                                                                         utilizado de forma abusiva carregando o cliente de
                                                                                                                                                         customizações desnecessárias.


                                                                                                  desacoplamento.                                        Alto custo.
                                                                                                                                                         Como os aplicativos são voltados para clientes
                                                                                                                                                         específicos o reaproveitamento deles é pequeno.


                                                                                                                                                         Mudanças no processo de negócio do cliente podem
                                                                                                                                                         afetar as funcionalidades implementadas no
                                                                                                                                                         software, podendo gerar necessidade de alterações
                                                                                                                                                         nas regras de negócio códigos da aplicação.
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                            Mecanismos de Injeção de Dependência                                           Proposta de Arquitetura




                                                                                                    Identificação do contexto
Monografia de Final de Curso




                                                                                                           O sistema deve possuir um contexto de execução que
                                                                                                           identifique o que trataremos por CustomizationType
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                            Mecanismos de Injeção de Dependência                                           Proposta de Arquitetura




                                                                                                    Identificação do contexto
Monografia de Final de Curso




                                                                                                           O gerenciador de contexto da aplicação será tratado
                                                                                                           com o nome AppContext
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                            Mecanismos de Injeção de Dependência                                          Proposta de Arquitetura




                                                                                                    Inserindo a injeção de comportamento
Monografia de Final de Curso




                                                                                                                  A solução consiste em alterar o método responsável
                                                                                                                  por resolver as dependências da Inversão de Controle
                                                                                                                  que iremos tratar com o nome resolver




                                                                                                    Ele deverá possuir um método “resolve”, que passará
                                                                                                    a verificar antes qual o tipo está sendo passado no
                                                                                                    parâmetro e deve tentar localizar o tipo
                                                                                                    correspondente a ele, baseando-se no
                                                                                                    CustomizationType dentro do AppContext
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                            Mecanismos de Injeção de Dependência                                                 Proposta de Arquitetura




                                                                                                     Método Resolver
Monografia de Final de Curso




                                                                                                                Quando o método resolve for chamado, a primeira
                                                                                                                coisa que ele deve fazer é buscar o
                                                                                                                CustomizationType dentro do AppContext.


                                                                                                                           De posse do tipo de customização corrente,
                                                                                                                           o resolver irá tentar carregar um tipo, que é o
                                                                                                                           resultado da concatenação do nome do tipo
                                                                                                                           solicitado com o CustomizationType do
                                                                                                                           contexto

                                                                                                   var newTypeName = typeof(T).FullName +
                                                                                                        AuthContext.CurrentContext.CurrentUser.Company.Parameters.AccessType;


                                                                                                   Type newType = Type.GetType(newTypeName);
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                            Mecanismos de Injeção de Dependência                                         Proposta de Arquitetura




                                                                                                    Método Resolver
Monografia de Final de Curso




                                                                                                              O tipo customizado deve estar no mesmo espaço de
                                                                                                              trabalho que o tipo originalmente passado ao método
                                                                                                              resolve. Após estes passos, caso o newType seja um
                                                                                                              objeto nulo, o resolver irá recuperar o objeto instanciado
                                                                                                              baseado no próprio tipo enviado no parâmetro genérico
                                                                                                              (<T>), caso contrário, ele usa reflection para carregar o
                                                                                                              objeto customizado
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                                                                                                            Proposta de Arquitetura


                                                                                                    Método Resolver
                                            Mecanismos de Injeção de Dependência



                                                                                                             private static T Resolve<T>()
Monografia de Final de Curso




                                                                                                                    {
                                                                                                                        object obj = null;


                                                                                                                        var newTypeName = typeof(T).FullName +
                                                                                                                        AppContext.CurrentCompany.CustomizationType;
                                                                                                                        Type newType = Type.GetType(newTypeName);


                                                                                                                        if (newType != null)
                                                                                                                            obj = _dependencyResolver.GetType()
                                                                                                                            .GetMethod("Resolve")
                                                                                                                            .MakeGenericMethod(newType)
                                                                                                                            .Invoke(_dependencyResolver, null);
                                                                                                                        if (obj == null)
                                                                                                                            obj = _dependencyResolver.Resolve<T>();


                                                                                                                        return (T)obj;
                                                                                                                    }
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                                                                                                           Proposta de Arquitetura


                                                                                                    Método Resolver
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                             Neste exemplo, caso o contexto ativo for o de uma
                                                                                                             empresa “Empresa A” (CustomizationType =
                                                                                                             “CustomerA”) que possui uma customização para o
                                                                                                             serviço de usuário (UserService), o método resolve irá
                                                                                                             procurar por uma classe UserServiceCustomerA no
                                                                                                             mesmo espaço de trabalho de UserService
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                                                                                                           Proposta de Arquitetura


                                                                                                    Método Resolver
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                             Neste mesmo exemplo, caso o contexto ativo seja de
                                                                                                             uma empresa “Empresa B” (CustomizationType =
                                                                                                             “CustomerB”) que não possui customização em
                                                                                                             UserService ou uma “Empresa C” que não possui um
                                                                                                             customizationType, o sistema irá retornar o “UserService”
                                                                                                             que é o comportamento padrão do sistema
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                                                                                                            Proposta de Arquitetura


                                                                                                    Criando customizações
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                             As customizações são feitas criando uma nova classe
                                                                                                             que herde da classe a ser customizada, sendo que seu
                                                                                                             espaço de trabalho deve ser o mesmo espaço de
                                                                                                             trabalho da classe a ser customizada, e seu nome seja a
                                                                                                             junção do nome da classe a ser customizada com o
                                                                                                             nome do CustomizationType
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                                                                                                            Proposta de Arquitetura


                                                                                                    Criando customizações
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                             Para customizar a classe de validação de empresa
                                                                                                             (CompanyValidator), adicionando novas validações
                                                                                                             específicas para um cliente, teremos por exemplo
Proposta de uma Arquitetura para Customização de Sistemas usando   Proposta
                                                                                                                              Proposta de Arquitetura


                                                                                                    Criando customizações
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                             namespace Sample.Core.Validation
                                                                                                             {
                                                                                                                 public class CompanyValidatorCompanyA : CompanyValidator
                                                                                                                 {
                                                                                                                     public override bool ValidateRemove(Company toBeRemoved,
                                                                                                                                 out IList<string> brokenRules)
                                                                                                                     {
                                                                                                                         base.ValidateRemove(toBeRemoved, out brokenRules);


                                                                                                                         […]//condições de validação


                                                                                                             brokenRules.Add(CompanyAResources.RootCompanyCantBeDeleted);


                                                                                                                         return brokenRules.Count == 0;
                                                                                                                     }
                                                                                                                 }
                                                                                                             }
Monografia de Final de Curso
Proposta de uma Arquitetura para Customização de Sistemas usando
             Mecanismos de Injeção de Dependência
                                                                                                             Proposta

                                                   Organização das Customizações
                                                                                   Proposta de Arquitetura
Proposta de uma Arquitetura para Customização de Sistemas usando   Resultados


                                                                                                    Implementado pela empresa Prime Systems em projeto de médio
                                            Mecanismos de Injeção de Dependência




                                                                                                    porte de 6 meses de duração
Monografia de Final de Curso




                                                                                                                 Atuação de 5 profissionais, sendo 3 desenvolvedores
                                                                                                                 sênior e dois arquitetos sênior


                                                                                                    A técnica foi usado no sistema para diferenciar o comportamento do
                                                                                                    software quando este é:

                                                                                                        • Empresas de um cliente
                                                                                                        • A empresa que administra o sistema
                                                                                                        • Empresas de teste e demonstração
Proposta de uma Arquitetura para Customização de Sistemas usando   Resultados
                                            Mecanismos de Injeção de Dependência




                                                                                                    O Sistema é um software desenvolvido para a plataforma web e
Monografia de Final de Curso




                                                                                                    vendido na forma de serviço pela Prime Systems, onde diversas
                                                                                                    empresas contratam estes serviços.


                                                                                                    Ao se cadastrar no Sistema, as empresas ganham um identificador
                                                                                                    único que é utilizado sempre que um usuário da empresa tem que
                                                                                                    acessar o Sistema, informando sempre o código da instancia, o
                                                                                                    nome do usuário e a senha.


                                                                                                    O sistema possui um cadastro de empesas, usuários, alguns ativos
                                                                                                    específicos, monitoramento de operações e diversas configurações,
                                                                                                    dentre as quais perfis de usuários, permissões de acesso, dentro
                                                                                                    outros.
Proposta de uma Arquitetura para Customização de Sistemas usando   Resultados
                                            Mecanismos de Injeção de Dependência




                                                                                                                      O modelo foi aplicado para diferenciar, no
Monografia de Final de Curso




                                                                                                                      momento em que o usuário acessa o sistema,
                                                                                                                      qual o tipo de acesso sua empresa possui,
                                                                                                                      baseado em uma característica que foi informada
                                                                                                                      no momento de seu cadastro.



                                                                                                    O desenvolvimento inicial, tido como fluxo convencional, foi o do
                                                                                                    acesso do tipo “Cliente”, sendo utilizadas o modelo para diferenciar
                                                                                                    a “empresa raiz” (que representa a Prime Systems, administradora
                                                                                                    do sistema) e a “Empresa Falsa”, que é usada para testes e
                                                                                                    demonstrações.
Proposta de uma Arquitetura para Customização de Sistemas usando   Resultados
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                    A técnica foi bem avaliada por todos os envolvidos no projeto,
                                                                                                    sendo ressaltada a facilidade de implementação e a boa separação
                                                                                                    dos interesses, pois pode-se obter as mudanças de comportamento
                                                                                                    necessárias ao tempo em que o código se manteve limpo e com
                                                                                                    pouco possibilidade de um afetar o outro.
Proposta de uma Arquitetura para Customização de Sistemas usando   Conclusão
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                    A proposta de arquitetura não provem a uma solução final para os
                                                                                                    problemas acerca da customização de software, porém é uma
                                                                                                    opção funcional e prática que pode ser aplicada e exercitada afim
                                                                                                    de se refiná-la e aprimorá-la
Proposta de uma Arquitetura para Customização de Sistemas usando   Referências
                                                                                                                                                           1/2




                                                                                                   ALEXANDER, C. I. S. . S. M. The Timeless Way of Building. New York: Oxford University
                                            Mecanismos de Injeção de Dependência



                                                                                                   Press, 1979.
Monografia de Final de Curso




                                                                                                   BROOKS, F. P. The mythical man-month: essays on software engineering. 2ª. ed. [S.l.]: Addison-
                                                                                                   Wesley, 1995.

                                                                                                   COELHO, O. P. Técnicas para Customização de Software. Microsoft MSDN Brasil, 2007. Disponivel
                                                                                                   em: <http://www.microsoft.com/brasil/msdn/tecnologias/arquitetura/Customizacao_Software.mspx>.
                                                                                                   Acesso em: 16 Janeiro 2012.

                                                                                                   FOWLER, M. Inversion of Control Containers and the Dependency Injection, 2004. Disponivel em:
                                                                                                   <http://martinfowler.com/articles/injection.html>. Acesso em: 20 Janeiro 2012.

                                                                                                   GOUSSET, M. et al. Professional Application Lifecycle. 1ª. ed. Indiana: Wiley Publishing, 2012.

                                                                                                   LEHMAN, M. M. Rules and Tools for Software Evolution Planning and Management. Imperial College
                                                                                                   - Department of Computing, 2000. Disponivel em:
                                                                                                   <http://www.doc.ic.ac.uk/~mml/feast2/papers/pdf/611_2.pdf>. Acesso em: 15 Janeiro 2012.

                                                                                                   LEHMAN, M. M. Feedback, Evolution And Software Technology - Brief Introduction. FEAST, 2001.
                                                                                                   Disponivel em: <http://www.doc.ic.ac.uk/~mml/feast/>. Acesso em: 15 Janeiro 2012.
Proposta de uma Arquitetura para Customização de Sistemas usando   Referências
                                                                                                                                                          2/2
                                            Mecanismos de Injeção de Dependência
Monografia de Final de Curso




                                                                                                   MARTIN, R. C. http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf. Object
                                                                                                   Mentor, 2000. Disponivel em:
                                                                                                   <http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf>. Acesso em: 24 Janeiro
                                                                                                   2012.

                                                                                                   NET FRAMEWORK DEVELOPER'S GUIDE..NET Framework Developer's Guide: Reflection Overview.
                                                                                                   MSDN, 2010. Disponivel em: <http://msdn.microsoft.com/en-us/library/f7ykdhsy(VS.71).aspx>. Acesso
                                                                                                   em: 2010 julho 10.

                                                                                                   PRESSMAN, R. S. Engenharia de Software. 3ª. ed. São Paulo: MAKRON Books do Brasil, 1995.

                                                                                                   SHALLOWAY, A. Design patterns explained: a new perspective on object-oriented design. New York:
                                                                                                   Addison-Wesley Publishing Co., 2002.

                                                                                                   SOMMERVILE, I. Engenharia de Software. 8ª. ed. São Paulo: Pearson, 2007.

Más contenido relacionado

Destacado

Apresentação monografia design
Apresentação monografia designApresentação monografia design
Apresentação monografia designDrica Veloso
 
Apresentação Monografia
Apresentação MonografiaApresentação Monografia
Apresentação MonografiaJoélcio Pinto
 
Apresentação da monografia - Banca USP 2013
Apresentação da monografia - Banca USP 2013Apresentação da monografia - Banca USP 2013
Apresentação da monografia - Banca USP 2013USP
 
Monografia sobre Negociacao
Monografia sobre NegociacaoMonografia sobre Negociacao
Monografia sobre NegociacaoFred Pacheco
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguroCharles Fortes
 
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5QuintusIntrodução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5QuintusCharles Fortes
 
Apresentação prof e materia
Apresentação prof e materiaApresentação prof e materia
Apresentação prof e materiaCharles Fortes
 
Sistemas Operacionais - Aula 5 - Concorrência
Sistemas Operacionais - Aula 5 - ConcorrênciaSistemas Operacionais - Aula 5 - Concorrência
Sistemas Operacionais - Aula 5 - ConcorrênciaCharles Fortes
 
Programação Genetica
Programação GeneticaProgramação Genetica
Programação GeneticaCharles Fortes
 
Conceitos – Do Homem à Máquina
Conceitos – Do Homem à MáquinaConceitos – Do Homem à Máquina
Conceitos – Do Homem à MáquinaCharles Fortes
 

Destacado (20)

Nacidos entre 1935 1960 pt
Nacidos entre 1935 1960 ptNacidos entre 1935 1960 pt
Nacidos entre 1935 1960 pt
 
Apresentação monografia design
Apresentação monografia designApresentação monografia design
Apresentação monografia design
 
Apresentação Monografia
Apresentação MonografiaApresentação Monografia
Apresentação Monografia
 
Apresentação da monografia - Banca USP 2013
Apresentação da monografia - Banca USP 2013Apresentação da monografia - Banca USP 2013
Apresentação da monografia - Banca USP 2013
 
Pdm -final
Pdm  -finalPdm  -final
Pdm -final
 
TCC SLIDE DE APRESENTAÇÃO
TCC SLIDE DE APRESENTAÇÃOTCC SLIDE DE APRESENTAÇÃO
TCC SLIDE DE APRESENTAÇÃO
 
ElaboraçãO De Transparencias
ElaboraçãO De TransparenciasElaboraçãO De Transparencias
ElaboraçãO De Transparencias
 
Monografia sobre Negociacao
Monografia sobre NegociacaoMonografia sobre Negociacao
Monografia sobre Negociacao
 
Monografia
MonografiaMonografia
Monografia
 
Apresentação monografia em 30min
Apresentação monografia em 30minApresentação monografia em 30min
Apresentação monografia em 30min
 
Dicas para apresentação do TCC
Dicas para apresentação do TCCDicas para apresentação do TCC
Dicas para apresentação do TCC
 
Monografia esea, pronta, mur jrdim e mª dulcine
Monografia esea, pronta, mur jrdim e mª dulcineMonografia esea, pronta, mur jrdim e mª dulcine
Monografia esea, pronta, mur jrdim e mª dulcine
 
Desenvolvimento de software seguro
Desenvolvimento de software seguroDesenvolvimento de software seguro
Desenvolvimento de software seguro
 
Metodologias ageis
Metodologias ageisMetodologias ageis
Metodologias ageis
 
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5QuintusIntrodução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
 
Apresentação prof e materia
Apresentação prof e materiaApresentação prof e materia
Apresentação prof e materia
 
Sistemas Operacionais - Aula 5 - Concorrência
Sistemas Operacionais - Aula 5 - ConcorrênciaSistemas Operacionais - Aula 5 - Concorrência
Sistemas Operacionais - Aula 5 - Concorrência
 
Lambda Expressions
Lambda ExpressionsLambda Expressions
Lambda Expressions
 
Programação Genetica
Programação GeneticaProgramação Genetica
Programação Genetica
 
Conceitos – Do Homem à Máquina
Conceitos – Do Homem à MáquinaConceitos – Do Homem à Máquina
Conceitos – Do Homem à Máquina
 

Similar a Apresentação monografia - Proposta de uma Arquitetura para Customização de Sistemas usando Mecanismos de Injeção de Dependência - UFMG

Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Lenin Abadie
 
Es17 predicao de defeitos em software
Es17   predicao de defeitos em softwareEs17   predicao de defeitos em software
Es17 predicao de defeitos em softwareVictor Hugo
 
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...Lucas Furtado de Oliveira
 
Interação entre MDA e PMBOK para Suporte ao Desenvolvimento de Aplicações Com...
Interação entre MDA e PMBOK para Suporte ao Desenvolvimento de Aplicações Com...Interação entre MDA e PMBOK para Suporte ao Desenvolvimento de Aplicações Com...
Interação entre MDA e PMBOK para Suporte ao Desenvolvimento de Aplicações Com...Thiago Fraga
 
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...Glauco Vinicius Argentino de Oliveira
 
Um Estudo sobre Arquiteturas de Software para Computação Ubíqua
Um Estudo sobre Arquiteturas de Software para Computação UbíquaUm Estudo sobre Arquiteturas de Software para Computação Ubíqua
Um Estudo sobre Arquiteturas de Software para Computação UbíquaRubens Matos Junior
 
Processos de software
Processos de softwareProcessos de software
Processos de softwareDann Volpato
 
Gerência de Configuração de Software: Benefícios Do Controle de Versões Distr...
Gerência de Configuração de Software: Benefícios Do Controle de Versões Distr...Gerência de Configuração de Software: Benefícios Do Controle de Versões Distr...
Gerência de Configuração de Software: Benefícios Do Controle de Versões Distr...Gilmar Pupo
 
(CONSTRUÇÃO2) Engenharia de Software_ADRIANA.pptx
(CONSTRUÇÃO2) Engenharia de Software_ADRIANA.pptx(CONSTRUÇÃO2) Engenharia de Software_ADRIANA.pptx
(CONSTRUÇÃO2) Engenharia de Software_ADRIANA.pptxDVDGlash
 
Arquitetando sistemas PHP
Arquitetando sistemas PHPArquitetando sistemas PHP
Arquitetando sistemas PHPEduardo Cesar
 
O uso de programação reflexiva para o desenvolvimento de aplicações comerciai...
O uso de programação reflexiva para o desenvolvimento de aplicações comerciai...O uso de programação reflexiva para o desenvolvimento de aplicações comerciai...
O uso de programação reflexiva para o desenvolvimento de aplicações comerciai...Jefferson Simão Gonçalves
 
Arquitetando aplicações php
Arquitetando aplicações phpArquitetando aplicações php
Arquitetando aplicações phpEduardo Cesar
 
Resumo capítulo 1 livro Engenharia de Software Moderna
Resumo capítulo 1 livro Engenharia de Software ModernaResumo capítulo 1 livro Engenharia de Software Moderna
Resumo capítulo 1 livro Engenharia de Software ModernaLucasBastos305659
 

Similar a Apresentação monografia - Proposta de uma Arquitetura para Customização de Sistemas usando Mecanismos de Injeção de Dependência - UFMG (20)

Es 09
Es 09Es 09
Es 09
 
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
 
Aula10
Aula10Aula10
Aula10
 
Aula 02
Aula 02Aula 02
Aula 02
 
Es17 predicao de defeitos em software
Es17   predicao de defeitos em softwareEs17   predicao de defeitos em software
Es17 predicao de defeitos em software
 
Aula07
Aula07Aula07
Aula07
 
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
 
Interação entre MDA e PMBOK para Suporte ao Desenvolvimento de Aplicações Com...
Interação entre MDA e PMBOK para Suporte ao Desenvolvimento de Aplicações Com...Interação entre MDA e PMBOK para Suporte ao Desenvolvimento de Aplicações Com...
Interação entre MDA e PMBOK para Suporte ao Desenvolvimento de Aplicações Com...
 
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
Estudo da aplicação da arquitetura orientada a serviços em um sistema de gest...
 
Folder
FolderFolder
Folder
 
Um Estudo sobre Arquiteturas de Software para Computação Ubíqua
Um Estudo sobre Arquiteturas de Software para Computação UbíquaUm Estudo sobre Arquiteturas de Software para Computação Ubíqua
Um Estudo sobre Arquiteturas de Software para Computação Ubíqua
 
Processos de software
Processos de softwareProcessos de software
Processos de software
 
Gerência de Configuração de Software: Benefícios Do Controle de Versões Distr...
Gerência de Configuração de Software: Benefícios Do Controle de Versões Distr...Gerência de Configuração de Software: Benefícios Do Controle de Versões Distr...
Gerência de Configuração de Software: Benefícios Do Controle de Versões Distr...
 
Implantacao de Software
Implantacao de SoftwareImplantacao de Software
Implantacao de Software
 
Reúso
ReúsoReúso
Reúso
 
(CONSTRUÇÃO2) Engenharia de Software_ADRIANA.pptx
(CONSTRUÇÃO2) Engenharia de Software_ADRIANA.pptx(CONSTRUÇÃO2) Engenharia de Software_ADRIANA.pptx
(CONSTRUÇÃO2) Engenharia de Software_ADRIANA.pptx
 
Arquitetando sistemas PHP
Arquitetando sistemas PHPArquitetando sistemas PHP
Arquitetando sistemas PHP
 
O uso de programação reflexiva para o desenvolvimento de aplicações comerciai...
O uso de programação reflexiva para o desenvolvimento de aplicações comerciai...O uso de programação reflexiva para o desenvolvimento de aplicações comerciai...
O uso de programação reflexiva para o desenvolvimento de aplicações comerciai...
 
Arquitetando aplicações php
Arquitetando aplicações phpArquitetando aplicações php
Arquitetando aplicações php
 
Resumo capítulo 1 livro Engenharia de Software Moderna
Resumo capítulo 1 livro Engenharia de Software ModernaResumo capítulo 1 livro Engenharia de Software Moderna
Resumo capítulo 1 livro Engenharia de Software Moderna
 

Más de Charles Fortes

Acesso a banco de dados com entity framework
Acesso a banco de dados com entity frameworkAcesso a banco de dados com entity framework
Acesso a banco de dados com entity frameworkCharles Fortes
 
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão Final
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão FinalPitagoras - Introdução a Programação Orientada a Objetos - Revisão Final
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão FinalCharles Fortes
 
Pitagoras - Introdução a Programação Orientada a Objetos - Conceitos
Pitagoras - Introdução a Programação Orientada a Objetos - ConceitosPitagoras - Introdução a Programação Orientada a Objetos - Conceitos
Pitagoras - Introdução a Programação Orientada a Objetos - ConceitosCharles Fortes
 
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...Charles Fortes
 
inteligência artificial - fuzzy - mineração
inteligência artificial - fuzzy - mineraçãointeligência artificial - fuzzy - mineração
inteligência artificial - fuzzy - mineraçãoCharles Fortes
 
PE2 - Funções e Structs
PE2 - Funções e StructsPE2 - Funções e Structs
PE2 - Funções e StructsCharles Fortes
 
Programação Estruturada 2 - Revisão C
Programação Estruturada 2 - Revisão CProgramação Estruturada 2 - Revisão C
Programação Estruturada 2 - Revisão CCharles Fortes
 
Programação Estruturada 2 - Apresentação do Professor
Programação Estruturada 2 - Apresentação do ProfessorProgramação Estruturada 2 - Apresentação do Professor
Programação Estruturada 2 - Apresentação do ProfessorCharles Fortes
 
IA - Introdução Inteligência Artificial
IA - Introdução Inteligência ArtificialIA - Introdução Inteligência Artificial
IA - Introdução Inteligência ArtificialCharles Fortes
 
IA - Apresentação do Professor
IA - Apresentação do ProfessorIA - Apresentação do Professor
IA - Apresentação do ProfessorCharles Fortes
 
PE1 - Comandos de Decisão
PE1 - Comandos de DecisãoPE1 - Comandos de Decisão
PE1 - Comandos de DecisãoCharles Fortes
 
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)Charles Fortes
 
LPC - aula 1 - Introdução .NET
LPC  - aula 1 - Introdução .NETLPC  - aula 1 - Introdução .NET
LPC - aula 1 - Introdução .NETCharles Fortes
 
LPC - Apresentação do Professor
LPC - Apresentação do ProfessorLPC - Apresentação do Professor
LPC - Apresentação do ProfessorCharles Fortes
 
PE-I - Apresentação Professor
PE-I - Apresentação ProfessorPE-I - Apresentação Professor
PE-I - Apresentação ProfessorCharles Fortes
 
Sistemas Operacionais - Aula 9 - Gerencia de Recursos
Sistemas Operacionais - Aula 9 - Gerencia de RecursosSistemas Operacionais - Aula 9 - Gerencia de Recursos
Sistemas Operacionais - Aula 9 - Gerencia de RecursosCharles Fortes
 
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre Processos
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre ProcessosSistemas Operacionais - Aula 8 - Sincronização e Comunicação entre Processos
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre ProcessosCharles Fortes
 
Sistemas Operacionais - Aula 7 - Processos e Threads
Sistemas Operacionais - Aula 7 - Processos e ThreadsSistemas Operacionais - Aula 7 - Processos e Threads
Sistemas Operacionais - Aula 7 - Processos e ThreadsCharles Fortes
 
Economia global: França e Inglaterra
Economia global: França e InglaterraEconomia global: França e Inglaterra
Economia global: França e InglaterraCharles Fortes
 
Sistemas Operacionais - Aula 6 - Estrutura do Sistema Operacional
Sistemas Operacionais - Aula 6 - Estrutura do Sistema OperacionalSistemas Operacionais - Aula 6 - Estrutura do Sistema Operacional
Sistemas Operacionais - Aula 6 - Estrutura do Sistema OperacionalCharles Fortes
 

Más de Charles Fortes (20)

Acesso a banco de dados com entity framework
Acesso a banco de dados com entity frameworkAcesso a banco de dados com entity framework
Acesso a banco de dados com entity framework
 
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão Final
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão FinalPitagoras - Introdução a Programação Orientada a Objetos - Revisão Final
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão Final
 
Pitagoras - Introdução a Programação Orientada a Objetos - Conceitos
Pitagoras - Introdução a Programação Orientada a Objetos - ConceitosPitagoras - Introdução a Programação Orientada a Objetos - Conceitos
Pitagoras - Introdução a Programação Orientada a Objetos - Conceitos
 
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
 
inteligência artificial - fuzzy - mineração
inteligência artificial - fuzzy - mineraçãointeligência artificial - fuzzy - mineração
inteligência artificial - fuzzy - mineração
 
PE2 - Funções e Structs
PE2 - Funções e StructsPE2 - Funções e Structs
PE2 - Funções e Structs
 
Programação Estruturada 2 - Revisão C
Programação Estruturada 2 - Revisão CProgramação Estruturada 2 - Revisão C
Programação Estruturada 2 - Revisão C
 
Programação Estruturada 2 - Apresentação do Professor
Programação Estruturada 2 - Apresentação do ProfessorProgramação Estruturada 2 - Apresentação do Professor
Programação Estruturada 2 - Apresentação do Professor
 
IA - Introdução Inteligência Artificial
IA - Introdução Inteligência ArtificialIA - Introdução Inteligência Artificial
IA - Introdução Inteligência Artificial
 
IA - Apresentação do Professor
IA - Apresentação do ProfessorIA - Apresentação do Professor
IA - Apresentação do Professor
 
PE1 - Comandos de Decisão
PE1 - Comandos de DecisãoPE1 - Comandos de Decisão
PE1 - Comandos de Decisão
 
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
 
LPC - aula 1 - Introdução .NET
LPC  - aula 1 - Introdução .NETLPC  - aula 1 - Introdução .NET
LPC - aula 1 - Introdução .NET
 
LPC - Apresentação do Professor
LPC - Apresentação do ProfessorLPC - Apresentação do Professor
LPC - Apresentação do Professor
 
PE-I - Apresentação Professor
PE-I - Apresentação ProfessorPE-I - Apresentação Professor
PE-I - Apresentação Professor
 
Sistemas Operacionais - Aula 9 - Gerencia de Recursos
Sistemas Operacionais - Aula 9 - Gerencia de RecursosSistemas Operacionais - Aula 9 - Gerencia de Recursos
Sistemas Operacionais - Aula 9 - Gerencia de Recursos
 
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre Processos
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre ProcessosSistemas Operacionais - Aula 8 - Sincronização e Comunicação entre Processos
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre Processos
 
Sistemas Operacionais - Aula 7 - Processos e Threads
Sistemas Operacionais - Aula 7 - Processos e ThreadsSistemas Operacionais - Aula 7 - Processos e Threads
Sistemas Operacionais - Aula 7 - Processos e Threads
 
Economia global: França e Inglaterra
Economia global: França e InglaterraEconomia global: França e Inglaterra
Economia global: França e Inglaterra
 
Sistemas Operacionais - Aula 6 - Estrutura do Sistema Operacional
Sistemas Operacionais - Aula 6 - Estrutura do Sistema OperacionalSistemas Operacionais - Aula 6 - Estrutura do Sistema Operacional
Sistemas Operacionais - Aula 6 - Estrutura do Sistema Operacional
 

Apresentação monografia - Proposta de uma Arquitetura para Customização de Sistemas usando Mecanismos de Injeção de Dependência - UFMG

  • 1. Monografia de Final de Curso Proposta de uma Arquitetura para Customização de Sistemas usando Mecanismos de Injeção de Dependência Aluno: Charles Wellington de Oliveira Fortes Orientador: Prof. Marco Túlio Valente
  • 2. Proposta de uma Arquitetura para Customização de Sistemas usando Introdução Mecanismos de Injeção de Dependência Monografia de Final de Curso Independente de seu porte ou ramo de negócio, as empresas possuem necessidades particulares Estas particularidades são muitas vezes repassadas aos softwares que lhes apóiam, seja criando softwares específicos ou adaptando funcionalidades de softwares vendidos como produto ou serviço
  • 3. Proposta de uma Arquitetura para Customização de Sistemas usando Introdução Mecanismos de Injeção de Dependência Monografia de Final de Curso Nesta monografia iremos focar nas formas como estas necessidades são inseridas nos softwares, caracterizando o que chamamos de customização de softwares O que significa em resumo, inserir as funcionalidades específicas de uma empresa em um software já existente (COELHO, 2007)
  • 4. Proposta de uma Arquitetura para Customização de Sistemas usando Introdução Mecanismos de Injeção de Dependência Monografia de Final de Curso Segundo Otávio P. Coelho – Arquiteto da Microsoft – em seu artigo sobre técnicas de customização de software os software (COELHO, 2007), a customização de softwares não se limita a introdução de modificações no sistema, ela acarreta uma série de complexidades e demanda um grande esforça de implementação.
  • 5. Proposta de uma Arquitetura para Customização de Sistemas usando Introdução Mecanismos de Injeção de Dependência Monografia de Final de Curso “Quando realizada pela empresa fabricante do software, a customização pode ser, por vezes, uma fonte de renda, por outras, de prejuízo.” (COELHO, 2007)
  • 6. Proposta de uma Arquitetura para Customização de Sistemas usando Problema Mecanismos de Injeção de Dependência Mesmo em se tratando de empresas do mesmo Monografia de Final de Curso ramo/setor, cada uma apresenta situações singulares decorrente de sua cultura organizacional, fluxo de trabalho, especialização/diferencial dentre outros Encontrar o melhor caminho para a adaptação de um software de pouco impacto e de fácil desenvolvimento e manutenção tarefa que não vem sendo fácil para os arquitetos e engenheiros de software
  • 7. Proposta de uma Arquitetura para Customização de Sistemas usando Objetivo Geral Analisar as formas de customização utilizadas por Mecanismos de Injeção de Dependência algumas empresas do setor Monografia de Final de Curso Propor uma alternativa de arquitetura que permita que um software seja adaptado com o mínimo de impacto em sua versão padrão, sendo que a adaptação é simples de ser feita e fácil de ser mantida.
  • 8. Proposta de uma Arquitetura para Customização de Sistemas usando Objetivo Específico Mecanismos de Injeção de Dependência Pesquisar e comparar as formas utilizadas por diversas Monografia de Final de Curso empresas de software para a adaptação de seus produtos, elicitando seus pontos positivos e negativos. Apresentar os resultados de qualidade e complexidade obtidos por empresas que utilizam as formas mais comuns de adaptação de software e propor uma alternativa.
  • 9. Proposta de uma Arquitetura para Customização de Sistemas usando Objetivo Específico Abordar as técnicas e padrões utilizados na arquitetura Mecanismos de Injeção de Dependência proposta, sendo elas Monografia de Final de Curso Inversão de Controle com Injeção de Dependência Reflexão computacional. Apresentar a arquitetura proposta e como desenvolvê-la.
  • 10. Proposta de uma Arquitetura para Customização de Sistemas usando Metodologia Mecanismos de Injeção de Dependência Monografia de Final de Curso Pesquisa em materiais bibliográficos Realização de pesquisa online sobre as formas de customização adotadas Aplicação prática em um projeto real
  • 11. Proposta de uma Arquitetura para Customização de Sistemas usando Leis da Evolução de Software Mecanismos de Injeção de Dependência Referencial teórico Monografia de Final de Curso Evoluções podem ser feitas para atender a demandas tecnológicas do ambiente (LEHMAN, 2000) ou as necessidades específicas de um cliente (COELHO, 2007).
  • 12. Proposta de uma Arquitetura para Customização de Sistemas usando Leis da Evolução de Software Mecanismos de Injeção de Dependência Referencial teórico Monografia de Final de Curso Este processo resulta em um aumento da complexidade e queda da qualidade do código fonte, o que eleva os custos da manutenção do software, podendo ir de 40% do custo de desenvolvimento (BROOKS, 1995) podendo inclusive excedê-los (SOMMERVILE, 2007).
  • 13. Proposta de uma Arquitetura para Customização de Sistemas usando Leis da Evolução de Software Mecanismos de Injeção de Dependência Referencial teórico Monografia de Final de Curso Durante o processo de alteração de um trecho do código fonte de um software, mesmo que para manutenções corretivas, esbarramos com a probabilidade de 20-50% de criar defeitos, além do aumento dos custos e necessidade de cobertura dos testes (BROOKS, 1995).
  • 14. Proposta de uma Arquitetura para Customização de Sistemas usando Padrões de Projetos Mecanismos de Injeção de Dependência Referencial teórico Monografia de Final de Curso Alexander (ALEXANDER, 1979) define que um padrão é uma solução para um problema em determinado contexto, podendo estes serem combinados para resolver um problema complexo
  • 15. Proposta de uma Arquitetura para Customização de Sistemas usando Inversão de Controle Mecanismos de Injeção de Dependência Referencial teórico Monografia de Final de Curso foi proposta pois os módulos de alto nível não deveriam depender diretamente dos módulos de implementação. Passando assim a apontar estas dependências para abstrações e transpassar o controle a eles (MARTIN, 2000).
  • 16. Proposta de uma Arquitetura para Customização de Sistemas usando Inversão de Controle Mecanismos de Injeção de Dependência Referencial teórico Monografia de Final de Curso Martin Fowler explica que a inversão de controle é uma característica comum dos frameworks, são um conjunto de “containers que ajudam a montar componentes de projetos diferentes em uma aplicação coesa” (FOWLER, 2004)
  • 17. Proposta de uma Arquitetura para Customização de Sistemas usando Injeção de Dependência Mecanismos de Injeção de Dependência Referencial teórico Monografia de Final de Curso a injeção de dependência passa a poder construir o objeto concreto na memória conforme o contexto de necessidade para aquela abstração (FOWLER, 2004)
  • 18. Proposta de uma Arquitetura para Customização de Sistemas usando Reflexão para Instanciação de Classes Mecanismos de Injeção de Dependência Referencial teórico Monografia de Final de Curso A reflexão computacional fornece objetos que encapsulam assemblies, módulos e tipos, e pode ser usada para criar instâncias de tipos dinamicamente, ligar o tipo a um objeto existente ou obter as definições de tipagem de um objeto existente (NET FRAMEWORK DEVELOPER'S GUIDE, 2010)
  • 19. Proposta de uma Arquitetura para Customização de Sistemas usando Pesquisa Mecanismos de Injeção de Dependência Proposta de Arquitetura Monografia de Final de Curso Distribuída de forma Online através do Google Docs Respondida por 36 profissionais de nível sênior atuantes na área de desenvolvimento ou arquitetura de software Os profissionais representam uma única empresa, localizadas nas cidades de Belo Horizonte (MG), São Paulo (SP), Rio de Janeiro (RJ) e Porto Alegre (RS)
  • 20. Proposta de uma Arquitetura para Customização de Sistemas usando Pesquisa Mecanismos de Injeção de Dependência Proposta de Arquitetura Monografia de Final de Curso Tipos de Customização segundo (COELHO, 2007) Branchs: Cópia do código fonte pra cada cliente Versionamento: Generalização das customizações para atender a todos os clientes, como nova funcionalidade do software Fluxo condicional: Customização implementada no fonte mas acessada através de uma validação condicional do tipo if (condição) { [...] instruções [...]; } Uso de linguagem de programação: Uso de linguagem de programação específica do software para extensão.
  • 21. Monografia de Final de Curso Proposta de uma Arquitetura para Customização de Sistemas usando Mecanismos de Injeção de Dependência Pesquisa Versionamento Incidência de erros Proposta de Arquitetura Impactos Complexidade
  • 22. Proposta de uma Arquitetura para Customização de Sistemas usando Pesquisa Proposta de Arquitetura Branchs Mecanismos de Injeção de Dependência Monografia de Final de Curso Prós Contras O produto se torna mais atraente para o cliente A complexidade aumenta com regras de negócios quando pode ser customizado à sua vontade. específicas de cada customização. Redução do custo total de desenvolvimento do Precisam ser feito mais testes e um longo processo de software e qualidade final é alta após processo de QA. Mas a qualidade final é alta. QA. Mantém um possível problema isolado a um cliente É preciso manter várias versões de um mesmo código. específico. rápida entrega difícil manutenção Cada cliente recebe o que solicitou. Um erro comum encontrado deverá ser corrigido nos fontes de todos os clientes. Cada cliente é independente na customização do Uma implementação feita em um cliente deve ser softaware. replicada para todos os clientes caso se queira essa funcionalidade. Facilidade de correção Gerenciar muitas branchs
  • 23. Monografia de Final de Curso Proposta de uma Arquitetura para Customização de Sistemas usando Mecanismos de Injeção de Dependência Pesquisa Versionamento Incidência de erros Impactos Proposta de Arquitetura Complexidade
  • 24. Proposta de uma Arquitetura para Customização de Sistemas usando Pesquisa Proposta de Arquitetura Versionamento Mecanismos de Injeção de Dependência Monografia de Final de Curso Prós Contras Baixa complexidade do código fonte Clientes que necessitam de situações muito específicas não são atendidos As novas funcionalidades ajudam na Funcionalidades que atendem a menos evolução do produto e com isto a clientes são implementadas por último conquistar mais clientes Facilidade de manutenção
  • 25. Monografia de Final de Curso Proposta de uma Arquitetura para Customização de Sistemas usando Mecanismos de Injeção de Dependência Pesquisa Incidência de erros Fluxos Condicionais Impactos Proposta de Arquitetura Complexidade
  • 26. Proposta de uma Arquitetura para Customização de Sistemas usando Pesquisa Proposta de Arquitetura Fluxos Condicionais Mecanismos de Injeção de Dependência Monografia de Final de Curso Prós Contras Facilidade de Implementar Dificuldade de controlar os recursos específicos e gerais Entrega rápida Dificuldade de gerenciamento e rastreabilidade dos requisitos e testes Erros afetam um grande numero de clientes
  • 27. Monografia de Final de Curso Proposta de uma Arquitetura para Customização de Sistemas usando Mecanismos de Injeção de Dependência Pesquisa Incidência de erros Uso de linguagem de programação Impactos Proposta de Arquitetura Complexidade
  • 28. Proposta de uma Arquitetura para Customização de Sistemas usando Pesquisa Proposta de Arquitetura Uso de linguagem de programação Mecanismos de Injeção de Dependência Prós Contras Monografia de Final de Curso Adequação a regra de negocio do cliente. Dificuldade de manutenção. Maior facilidade de implementação Pela facilidade de se customizar, esse modelo é utilizado de forma abusiva carregando o cliente de customizações desnecessárias. desacoplamento. Alto custo. Como os aplicativos são voltados para clientes específicos o reaproveitamento deles é pequeno. Mudanças no processo de negócio do cliente podem afetar as funcionalidades implementadas no software, podendo gerar necessidade de alterações nas regras de negócio códigos da aplicação.
  • 29. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Mecanismos de Injeção de Dependência Proposta de Arquitetura Identificação do contexto Monografia de Final de Curso O sistema deve possuir um contexto de execução que identifique o que trataremos por CustomizationType
  • 30. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Mecanismos de Injeção de Dependência Proposta de Arquitetura Identificação do contexto Monografia de Final de Curso O gerenciador de contexto da aplicação será tratado com o nome AppContext
  • 31. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Mecanismos de Injeção de Dependência Proposta de Arquitetura Inserindo a injeção de comportamento Monografia de Final de Curso A solução consiste em alterar o método responsável por resolver as dependências da Inversão de Controle que iremos tratar com o nome resolver Ele deverá possuir um método “resolve”, que passará a verificar antes qual o tipo está sendo passado no parâmetro e deve tentar localizar o tipo correspondente a ele, baseando-se no CustomizationType dentro do AppContext
  • 32. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Mecanismos de Injeção de Dependência Proposta de Arquitetura Método Resolver Monografia de Final de Curso Quando o método resolve for chamado, a primeira coisa que ele deve fazer é buscar o CustomizationType dentro do AppContext. De posse do tipo de customização corrente, o resolver irá tentar carregar um tipo, que é o resultado da concatenação do nome do tipo solicitado com o CustomizationType do contexto var newTypeName = typeof(T).FullName + AuthContext.CurrentContext.CurrentUser.Company.Parameters.AccessType; Type newType = Type.GetType(newTypeName);
  • 33. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Mecanismos de Injeção de Dependência Proposta de Arquitetura Método Resolver Monografia de Final de Curso O tipo customizado deve estar no mesmo espaço de trabalho que o tipo originalmente passado ao método resolve. Após estes passos, caso o newType seja um objeto nulo, o resolver irá recuperar o objeto instanciado baseado no próprio tipo enviado no parâmetro genérico (<T>), caso contrário, ele usa reflection para carregar o objeto customizado
  • 34. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Proposta de Arquitetura Método Resolver Mecanismos de Injeção de Dependência private static T Resolve<T>() Monografia de Final de Curso { object obj = null; var newTypeName = typeof(T).FullName + AppContext.CurrentCompany.CustomizationType; Type newType = Type.GetType(newTypeName); if (newType != null) obj = _dependencyResolver.GetType() .GetMethod("Resolve") .MakeGenericMethod(newType) .Invoke(_dependencyResolver, null); if (obj == null) obj = _dependencyResolver.Resolve<T>(); return (T)obj; }
  • 35. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Proposta de Arquitetura Método Resolver Mecanismos de Injeção de Dependência Monografia de Final de Curso Neste exemplo, caso o contexto ativo for o de uma empresa “Empresa A” (CustomizationType = “CustomerA”) que possui uma customização para o serviço de usuário (UserService), o método resolve irá procurar por uma classe UserServiceCustomerA no mesmo espaço de trabalho de UserService
  • 36. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Proposta de Arquitetura Método Resolver Mecanismos de Injeção de Dependência Monografia de Final de Curso Neste mesmo exemplo, caso o contexto ativo seja de uma empresa “Empresa B” (CustomizationType = “CustomerB”) que não possui customização em UserService ou uma “Empresa C” que não possui um customizationType, o sistema irá retornar o “UserService” que é o comportamento padrão do sistema
  • 37. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Proposta de Arquitetura Criando customizações Mecanismos de Injeção de Dependência Monografia de Final de Curso As customizações são feitas criando uma nova classe que herde da classe a ser customizada, sendo que seu espaço de trabalho deve ser o mesmo espaço de trabalho da classe a ser customizada, e seu nome seja a junção do nome da classe a ser customizada com o nome do CustomizationType
  • 38. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Proposta de Arquitetura Criando customizações Mecanismos de Injeção de Dependência Monografia de Final de Curso Para customizar a classe de validação de empresa (CompanyValidator), adicionando novas validações específicas para um cliente, teremos por exemplo
  • 39. Proposta de uma Arquitetura para Customização de Sistemas usando Proposta Proposta de Arquitetura Criando customizações Mecanismos de Injeção de Dependência Monografia de Final de Curso namespace Sample.Core.Validation { public class CompanyValidatorCompanyA : CompanyValidator { public override bool ValidateRemove(Company toBeRemoved, out IList<string> brokenRules) { base.ValidateRemove(toBeRemoved, out brokenRules); […]//condições de validação brokenRules.Add(CompanyAResources.RootCompanyCantBeDeleted); return brokenRules.Count == 0; } } }
  • 40. Monografia de Final de Curso Proposta de uma Arquitetura para Customização de Sistemas usando Mecanismos de Injeção de Dependência Proposta Organização das Customizações Proposta de Arquitetura
  • 41. Proposta de uma Arquitetura para Customização de Sistemas usando Resultados Implementado pela empresa Prime Systems em projeto de médio Mecanismos de Injeção de Dependência porte de 6 meses de duração Monografia de Final de Curso Atuação de 5 profissionais, sendo 3 desenvolvedores sênior e dois arquitetos sênior A técnica foi usado no sistema para diferenciar o comportamento do software quando este é: • Empresas de um cliente • A empresa que administra o sistema • Empresas de teste e demonstração
  • 42. Proposta de uma Arquitetura para Customização de Sistemas usando Resultados Mecanismos de Injeção de Dependência O Sistema é um software desenvolvido para a plataforma web e Monografia de Final de Curso vendido na forma de serviço pela Prime Systems, onde diversas empresas contratam estes serviços. Ao se cadastrar no Sistema, as empresas ganham um identificador único que é utilizado sempre que um usuário da empresa tem que acessar o Sistema, informando sempre o código da instancia, o nome do usuário e a senha. O sistema possui um cadastro de empesas, usuários, alguns ativos específicos, monitoramento de operações e diversas configurações, dentre as quais perfis de usuários, permissões de acesso, dentro outros.
  • 43. Proposta de uma Arquitetura para Customização de Sistemas usando Resultados Mecanismos de Injeção de Dependência O modelo foi aplicado para diferenciar, no Monografia de Final de Curso momento em que o usuário acessa o sistema, qual o tipo de acesso sua empresa possui, baseado em uma característica que foi informada no momento de seu cadastro. O desenvolvimento inicial, tido como fluxo convencional, foi o do acesso do tipo “Cliente”, sendo utilizadas o modelo para diferenciar a “empresa raiz” (que representa a Prime Systems, administradora do sistema) e a “Empresa Falsa”, que é usada para testes e demonstrações.
  • 44. Proposta de uma Arquitetura para Customização de Sistemas usando Resultados Mecanismos de Injeção de Dependência Monografia de Final de Curso A técnica foi bem avaliada por todos os envolvidos no projeto, sendo ressaltada a facilidade de implementação e a boa separação dos interesses, pois pode-se obter as mudanças de comportamento necessárias ao tempo em que o código se manteve limpo e com pouco possibilidade de um afetar o outro.
  • 45. Proposta de uma Arquitetura para Customização de Sistemas usando Conclusão Mecanismos de Injeção de Dependência Monografia de Final de Curso A proposta de arquitetura não provem a uma solução final para os problemas acerca da customização de software, porém é uma opção funcional e prática que pode ser aplicada e exercitada afim de se refiná-la e aprimorá-la
  • 46. Proposta de uma Arquitetura para Customização de Sistemas usando Referências 1/2 ALEXANDER, C. I. S. . S. M. The Timeless Way of Building. New York: Oxford University Mecanismos de Injeção de Dependência Press, 1979. Monografia de Final de Curso BROOKS, F. P. The mythical man-month: essays on software engineering. 2ª. ed. [S.l.]: Addison- Wesley, 1995. COELHO, O. P. Técnicas para Customização de Software. Microsoft MSDN Brasil, 2007. Disponivel em: <http://www.microsoft.com/brasil/msdn/tecnologias/arquitetura/Customizacao_Software.mspx>. Acesso em: 16 Janeiro 2012. FOWLER, M. Inversion of Control Containers and the Dependency Injection, 2004. Disponivel em: <http://martinfowler.com/articles/injection.html>. Acesso em: 20 Janeiro 2012. GOUSSET, M. et al. Professional Application Lifecycle. 1ª. ed. Indiana: Wiley Publishing, 2012. LEHMAN, M. M. Rules and Tools for Software Evolution Planning and Management. Imperial College - Department of Computing, 2000. Disponivel em: <http://www.doc.ic.ac.uk/~mml/feast2/papers/pdf/611_2.pdf>. Acesso em: 15 Janeiro 2012. LEHMAN, M. M. Feedback, Evolution And Software Technology - Brief Introduction. FEAST, 2001. Disponivel em: <http://www.doc.ic.ac.uk/~mml/feast/>. Acesso em: 15 Janeiro 2012.
  • 47. Proposta de uma Arquitetura para Customização de Sistemas usando Referências 2/2 Mecanismos de Injeção de Dependência Monografia de Final de Curso MARTIN, R. C. http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf. Object Mentor, 2000. Disponivel em: <http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf>. Acesso em: 24 Janeiro 2012. NET FRAMEWORK DEVELOPER'S GUIDE..NET Framework Developer's Guide: Reflection Overview. MSDN, 2010. Disponivel em: <http://msdn.microsoft.com/en-us/library/f7ykdhsy(VS.71).aspx>. Acesso em: 2010 julho 10. PRESSMAN, R. S. Engenharia de Software. 3ª. ed. São Paulo: MAKRON Books do Brasil, 1995. SHALLOWAY, A. Design patterns explained: a new perspective on object-oriented design. New York: Addison-Wesley Publishing Co., 2002. SOMMERVILE, I. Engenharia de Software. 8ª. ed. São Paulo: Pearson, 2007.