Especificação Sistema Módulos AMADIS 2.x

Da AMADIS

Peca esboço.gif

'Este artigo é somente um esboço para um artigo maior.
'Quer ajudar o AMADIS? Acrescente alguma informação!

A idéia do sistema modular do AMADIS é muito semelhante a de vários outros sistemas ou plataformas. Seu principal objetivo é facilitar a customização do ambiente e o desenvolvimento de novas funcionalidades. Entretanto, de forma distinta de outro sistemas, o AMADIS tem como requisito uma grande integração entre suas ferramentas, fato que dificulta o desenvolvimento de uma arquitetura de modularidade simples. Como desenvolver uma ferramenta que interfira no funcionamento de outras ferramentas as quais não se sabe quais são?

Este documento tem como objetivo discutir e especificar a solução de modularidade desenvolvida no AMADIS. Inicialmente, é realizado um apanhado sobre sistemas modulares em outras ferramentas de código aberto, como forma de embasar as decisões tomadas na parte seguinte do documento.


Índice

Modularidade em outras Ferramentas

Esta seção visa visitar os mecanismos de modularidade de diferentes ferramentas SL/OS com o objetivo de construir uma base de conhecimento comum para a discussão/especificação que se segue no resto do documento.

MediaWiki

O MediaWiki, software utilizado no Wikipedia, utiliza um sistema de módulos chamado extensões. Uma extensão amplia as funcionalidades iniciais do sistema de duas maneiras: (a) definindo novos tags para a linguagem de marcação do wiki ou (b) criando uma página especial para o Wiki.

Em ambos os casos, o Mediawiki utiliza uma estratégia chamada hooks para que o módulo diga ao sistema em que momento as funções que ele implementa poderão ser chamadas. Tudo isso ocorre de forma muito simples, por meio da adição de novos itens em arrays. Suponhamos que iremos criar uma nova extensão chamada de exemplo, a qual define um novo tag chamado foobar.

<codehighlight language=php><? $wgExtensionFunctions[] = "wfExemploExtension";

function wfExemploExtension() {

   global $wgParser;
   # register the extension with the WikiText parser
   # the first parameter is the name of the new tag.
   # In this case it defines the tag <example> ... </example>
   # the second parameter is the callback function for
   # processing the text between the tags
   $wgParser->setHook( "foobar", "renderExample" );

} ?> </codehighlight>

No exemplo acima, o código do módulo declara a sua função de bootstrap (wfExemploExtension) adicionando-a no array $wgExtensionFunctions. Dentro da função, ela adiciona ao parser do sistema um hook chamado foobar, o qual deve ser tratado pela função renderExample. Toda a vez que o parser encontrar uma tag foobar ele ira invocar a função renderExample, passando o conteúdo do bloco como parâmetro. Uma solução simples e elegante.

A criação de uma página especial exige um pouco mais de trabalho, mas alinha-se dentro da mesma lógica de solução. A diferença é que ao invés de se definir uma função, define-se uma classe que será responsável por renderizar a página. Observe o exemplo abaixo:

<codehighlight language=php><?php $wgSpecialPages['MyExtension'] = 'MyExtension';

class MyExtension extends SpecialPage {

       function MyExtension() {
               SpecialPage::SpecialPage("MyExtension");
       }
       function execute( $par ) {
               global $wgRequest, $wgOut;
               
               $this->setHeaders();
               # Get request data from, e.g.
               $param = $wgRequest->getText('param');
               
               # Do stuff
               ...
               # Output
               # $wgOut->addHTML( $output );
       }

} ?> </codehighlight>

A forma como o MediaWiki estende suas funcionalidades iniciais é muito facilitada pela existência de um sistema monolítico bem definido. Existe pouca flexibilidade nas ações que um módulo pode realizar dentro do sistema o que facilita sua definição.

Drupal

Arquitetura da Modularidade no AMADIS

A idéia básica é dividir as funcionalidades do amadis em dois grupos básicos:

  • Core
    • Controle de usuários
    • administração
    • Funcionalidades básicas de biblioteca
  • Módulos
    • todo o resto

Os módulos teriam três naturezas:

  • Módulos para criação de grupos (projetos, comunidades, etc...)
  • Módulos para o trabalho coletivo (fórum, chat, wiki, publicação,...)
  • Módulos para o trabalho individual (diário, álbum, biblioteca, etc,...)

Descrição do Módulo

Ferramentas para Suportar a Modularidade

Ferramentas pessoais
Parceiros
















SourceForge.net Logo

Supported by Cenqua