SyntaxHighlighter

quinta-feira, 15 de agosto de 2013

Uma idéia para um Sistema de Vendas online

Como o Blog é jovem e a minha idéia é fazê-lo bem democrático, mas também muito polêmico, posto que de que adianta ficar colocando artigos "água com açúcar" por aqui, artigos mais simples vão servir apenas para os leitores que precisam de algo rápido e bem organizado para resolver os seus problemas do dia a dia, isso acontece muito comigo também e foi pensando nisso e também para que este Blog seja sempre visitado e encontrado por todos os leitores que são entusiastas, profissionais, curiosos, loucos e afins, enfim, toda a gama de leitor que goste ou que queira aprender a programar utilizando como exemplos os projetos do mundo real posto que se fosse de outra forma, qual a graça teria em se criar um Weblog sobre desenvolvimento? pois é, nenhuma.
O título desta postagem ficou bastante vago, ele ficou vago principalmente porque a primeira situação é que não vou usar apenas uma linguagem de programação, mas sim Java, C# e VB.NET e cada uma delas têm as suas peculiaridades, não é mesmo? inicialmente, vamos fazer uma listagem do quê vamos usar, ou seja, a arquitetura, mas de antemão já informo a vocês que vou usar o Oracle como Banco de Dados até para sair um pouco do padrão do MySQL no Java, que agora está sendo substituído pelo MariaDB - os criadores do My depois que o venderam para a Oracle, estão criando outro produto de sucesso, vamos ver para quem vão vender e por quanto -, no .NET (seja C# ou VB) o uso do SQL Server é o padrão.
Mas, para deixar o pessoal mais à vontade, eu vou usar Triggers, Stored Procedures, Functions, Sequences e outros objetos com o Oracle e posso fazer o mesmo utilizando o Microsoft SQL Server 2008 R2 como uma forma de treinar o Leitor para aplicar as Regras de Negócio também no Banco de Dados e acioná-los via Regra de Negócio do Sistema.

O que é necessário para um Sistema de Vendas online?
Bem, de acordo com uma necessidade, um Sistema de Vendas online é dividido em duas partes: a Frente de Loja e a Retaguarda.
Na Frente de Loja, ocorre toda a interação com o cliente, ou seja, a home onde o cliente escolhe o produto, lista o produto, faz a compra, faz o pagamento e etc. A parte de interação com o cliente.
Já a Retaguarda é a parte mais importante para o setor administrativo, é nele que são calculados o lucro, o estoque, as comissões e a geração dos relatórios em tempo real.
No levantamento de Requisitos, temos as seguintes funções da Frente de Loja:

  • Venda de Produto;
  • Busca de Produto;
  • Emissão de Pedido;
  • Integração com gateway de pagamento;
  • Cadastro de cliente;
Temos na Retaguarda, as seguintes funções, iniciais claro, podemos adicionar algo durante o desenvolvimento:
  • Controle de Estoque;
  • Controle de Pedidos;
  • Controle de Vendas;
  • Controle de Entrega de Produtos;
  • Controle Logístico;
  • Controle de Comissão para Vendedores;
  • Relatórios Diversos;
Inclusive, a Frente de Loja, em algumas funcionalidades, faz acesso à Retaguarda, como podemos ver no caso da Venda de Produto e o Controle de Estoque que estão ligadas.
Cada uma destas funcionalidades será melhor abstraída com o intuito de se criar um Diagrama de Casos de Uso ou uma seleção de Estórias de Usuário para criar um Backlog de Produto caso usemos Scrum para controle de nosso cronograma.
No levantamento dos requisitos, já temos um noção do que vamos precisar na Arquitetura.
Vamos precisar criar uma Camada intermediária para controlar a Frente de Loja e a Retaguarda e eu vou chamar esta Camada de Centro de Comando e Controle da Aplicação, nela poderemos fazer a interligação entre a Camada de Frente de Loja e a Camada de Retaguarda.
Já temos uma noção de como vamos começar a separar as partes importantes do Sistema, agora vamos verificar as permissões de segurança.

Permissões e Segurança
Os atores desta nossa trama e dos nossos Casos de Uso e Estórias de Usuário são: o Cliente, o Administrador e o Funcionário.

O Cliente é o responsável por fazer as compras e interagir com a Frente de Loja.
O Administrador é o responsável pelos cadastros dos produtos que são efetuados na retaguarda.
O Funcionário é o responsável pela extração dos Relatórios, Controle de Entrega de Produtos, Controle Logístico, Controle de Comissão dos Vendedores ou Afiliados.

Arquitetura para o Java
Cenário 1:
Para Persistência, vamos usar o Hibernate 3, até para que possamos fazer um Projeto de Migração para Hibernate 4.
Para Mapeamento das Entidades vamos utilizar o JPA 2 com NamedQuery e Anotações.
EJB 3.1 para Injeção de Dependências e componentização, vamos criar os módulos de Frente de Loja e Retaguarda
Para a Camada de Apresentação vamos utilizar a Web com o Primefaces com JSF 2
Para a Camada de Segurança e Controle de Acesso, podemos utilizar o Spring Security.
O Container que iremos utilizar será o GlassFish.

O Spring será usado apenas seu Módulo de Segurança, posto que o EJB já faz o trabalho de Injeção de Dependências.

Cenário 2:
Persistência: Hibernate 3
Mapeamento das entidades será feita com JPA 2 com NamedQuery e Anotações.
Arquitetura MVC utilizando ManageBean
Camada de Apresentação: JSF com PrimeFaces 

Bonus:
WebServices para consumo e acesso de Dispositivos Móveis.
Restful Services para consumo de dispostivios Móveis.
Aplicativo para iPad compatível com a Loja.
Aplicativo para Android compatível com a Loja.
Barramento utilizando o Mule que é um Enterprise Service Bus gratuito.

Todos os cenários serão forçosamente utilizados os padrões de Fachada, Service Locator, Business Delegate e principalmente o uso dos tipos Genéricos com o Java. Deixando bem claro que tais padrões são obrigatórios dentro do EJB, caso não sejam utilizados, o modelo não será certificado. Vamos abusar do Ajax.

Arquitetura para o .NET

- Persistência com NHibernate (projeto de atributos como annotations no Java)
- Container de IoC com Spring.NET
- Na Camada de Apresentação vamos utilizar o ASP.NET MVC 4 com o Razor.
- Desenvolvimento será efetuado em 3 camadas: DAL (Camada de Dados), BLL (Camada de Regra de negócios) e Apresentação.

Bonus:
Integração com dispositivos Móveis
Consumo de WebServices de todas as funcionalidades do Sistema.

É desnecessário dizer que usaremos o HTML5 e o CSS3 tanto no Java, que será implementado via primefaces e no MVC 4 utilizando.

Arquitetura para o PHP
A minha idéia é criar um página do zero utilizando o PHP, ou seja, vou fazê-lo todo orientado a objetos, diante disso, vai demorar um pouco mais até porque é necessário que eu faça uma reestudo sobre a nova versão do PHP e ver o que mudou com relação a versão anterior. Porém, estou com certa dúvida se utilizo ou não frameworks, o framework que eu utilizaria seria o cakePHP que é um framework MVC e de fácil compreensão e utilização.

- Camada de Apresentação: HTML5 + CSS3 + jQuery + jQueryUI
- Controle de Sessão e Camada de Segurança.

Os Rumos dos Artigos

Sei que muitos leitores estão querendo saber como que faremos os artigos subsequentes para que tornemos este Projeto uma realidade. Bem, eu posso atender a todos os gostos e como eu disse, este blog é bastante cosmopolita. Para aqueles que já tem um bom conhecimento e que não precisa conhecer os conceitos básicos das linguagens já iniciarei com o primeiro artigo do Sistema. Mas, caso o leitor não se sinta confortável com os códigos que está vendo e necessite de um apoio mais básico ou intermediário, então, também farei, em paralelo com os artigos do Sistema, artigos comentando o básico de todas as linguagens empregadas neste blog, é uma forma de ajudar a todos e que consigam andar e acompanhar o "ritmo".

Então, o primeiro artigo que faremos será a Modelagem do Sistema contendo a abstração principal, Formulários de Caso de Uso, Diagramas de Casos de Uso e etc. O primeiro artigo de codificação do Sistema será feito em Java e vamos utilizar o primeiro cenário: EJB. O que isso significa: que farei primeiramente um artigo sobre EJB para dar uma base ao leitor e logo em seguida, vamos fazer as codificações de dentro do Sistema. Não se preocupe em baixar os códigos, posto que em cada artigo informaremos o que deve ser baixado e como ser instalado. Já para os leitores que conhecem um pouco menos do Java, vamos começar com Orientação a Objetos baseado no Java, Orientação a Objetos baseado no C# e Orientação a objetos baseado no VB.NET.

Então, até o próximo artigo e lembre-se sempre de fortalecer o trabalho em equipe porque não se consegue nada e nenhuma vitória sozinho.

É um prazer tê-lo - ou tê-la - como leitor - ou leitora.

Forte Abraço a todos.