As diversas classes do sistema estão divididas em quatro camadas representadas por quatro namespaces, sendo que nessa seção estão apresentados alguns exemplos da codificação dessas classes.
As classes pertencentes ao namespace KinectFisioterapia.DTO, que são basicamente as classes que representam as entidades do sistema, contém em seu código fonte os atributos da entidade representada e os métodos que garantem o acesso a esses atributos. O Quadro 1 apresenta o código fonte da classe Usuario que é uma das classes pertencentes a este namespace.
Quadro 1 – Código fonte da classe Usuario
Fonte: Elaborado pelo autor.
public class Usuario { int? id;
String login; String senha;
Fisioterapeuta fisioterapeuta; public int? ID {
get { return id; } set { id = value; } }
public String Login { get { return login; } set { login = value; } }
public String Senha { get { return senha; } set { senha = value; } }
public Fisioterapeuta Fisioterapeuta { get { return fisioterapeuta; } set { fisioterapeuta = value; } }
Além das classes que representam entidades do sistema também estão contidas no namespace KinectFisioterapia.DTO algumas classes que servem como filtros utilizados na busca de informações no banco de dados. O Quadro 2 apresenta o código fonte da classe ExercicioFiltro que é utilizada para filtrar a listagem dos exercícios cadastrados no sistema.
Quadro 2 – Código fonte da classe ExercicioFiltro
Fonte: Elaborado pelo autor.
Para exemplificar a função das classes de filtragem do sistema pode-se supor que tenhamos que buscar todos os exercícios cadastrados por um determinado fisioterapeuta. Para isso é utilizado o atributo fisioterapeuta da classe ExercicioFiltro, sendo que quando o mesmo é informado o método responsável por listar os exercícios cadastrados no sistema restringe a listagem para que sejam buscados apenas os exercícios cadastrados pelo fisioterapeuta informado no filtro.
Além das classes para as entidades do sistema e das classes de filtragem este namespace contém ainda mais uma classe diferenciada que é a classe BancoDeDados. Essa classe possui apenas um atributo estático denominado conexao que tem por função armazenar os parâmetros para a conexão do sistema com o banco de dados. Para o acesso a esse atributo a classe conta ainda com um método estático denominado getConexao, sendo que esse método é chamado em todas as classes de persistência do sistema. No Quadro 3 é apresentado o código fonte da classe BancoDeDados.
public class ExercicioFiltro
{
Fisioterapeuta fisioterapeuta; public Fisioterapeuta Fisioterapeuta {
get { return fisioterapeuta; } set { fisioterapeuta = value; } }
Quadro 3 – Código fonte da classe BancoDeDados
Fonte: Elaborado pelo autor.
Já as classes pertencentes ao namespace KinectFisioterapia.DAL são responsáveis por realizar o acesso da aplicação aos dados armazenados no banco de dados. Estas classes possuem quatro atributos que auxiliam no acesso ao banco de dados e possuem basicamente os métodos: incluir, alterar, excluir, carregar, listar e getID. Além desses métodos comuns entre as várias classes pertencentes a esse namespace algumas classes possuem ainda alguns métodos específicos de acordo com a necessidade apresentada.
Para exemplificar o código fonte das classes do namespace KinectFisioterapia.DAL o Quadro 4 apresenta os atributos e o método construtor da classe UsuarioDAL.
Quadro 4 –Atributos e método construtor da classe UsuarioDAL
Fonte: Elaborado pelo autor.
O atributo conexaoMySql é responsável por armazenar os parâmetros para o acesso ao banco de dados da aplicação e no momento que o método construtor é executado é atribuído a ele o retorno do método getConexao da classe BancoDeDados. O atributo con é responsável
class BancoDeDados
{
private static String _conexao = "server=localhost; user id=root; password=1234abcd; database=kinect_fisioterapia";
public static String getConexao () { return _conexao; } } class UsuarioDAL { MySqlTransaction t = null; String conexaoMySql = ""; MySqlConnection con = null; const String TABELA = "usuario"; public UsuarioDAL()
{
conexaoMySql = BancoDeDados.getConexao(); }
por armazenar a conexão de fato com o banco de dados enquanto o atributo t é utilizado para o controle de transações. Já a constante TABELA é responsável por guardar o nome da tabela do banco de dados referente a classe do sistema.
No Quadro 5 está apresentado o código fonte do método excluir da classe UsuarioDAL para que possa ser observada a utilização dos atributos da classe e também a forma com que funcionam basicamente os métodos das classes de persistência do sistema.
Quadro 5 – Método excluir da classe UsuarioDAL
Fonte: Elaborado pelo autor.
Em geral os métodos das classes de persistência do sistema recebem como parâmetro um objeto da classe MySqlConnection e um objeto da classe MySqlTransaction, sendo que os valores desses parâmetros são atribuídos aos atributos con e t da classe nos casos em que o método chamado dever ser executado por uma transação que já está em andamento. Nos
public void excluir(Usuario usuario, MySqlConnection _con, MySqlTransaction _t) { if (_con != null && _t != null){
con = _con; t = _t; } else {
con = new MySqlConnection(conexaoMySql); con.Open();
t = con.BeginTransaction(IsolationLevel.Serializable); }
try {
String sql = "DELETE FROM " + TABELA + " WHERE id = @id "; MySqlCommand cmd = new MySqlCommand(sql, con);
cmd.Parameters.AddWithValue("@id", usuario.ID); cmd.Transaction = t;
cmd.ExecuteNonQuery();
if (_con == null || _t == null) { t.Commit();
}
} catch (Exception ex) {
if (_con == null || _t == null) { t.Rollback();
}
throw ex; } finally {
if (con != null && (_con == null || _t == null)) { con.Close();
} } }
outros casos a conexão com o banco é aberta no início do método e encerrada quando o método é finalizado.
No namespace KinectFisioterapia.BLL estão as classes de lógica de negócio do sistema, sendo que essas classes, além de fazer a consistência dos dados que serão enviados ao banco de dados, fazem a ligação entre a camada de apresentação e a camada de persistência do sistema.
As classes pertencentes a esse namespace possuem apenas um atributo que é responsável por referenciar um objeto da classe correspondente no namespace KinectFisioterapia.DAL. Por exemplo, na classe UsuarioBLL existe um atributo que é um objeto da classe UsuarioDAL.
Como exemplo de uma classe pertencente ao namespace KinectFisioterapia.BLL estão apresentados no Quadro 6 os métodos incluir e consistir da classe UsuarioBLL.
Quadro 6 – Métodos consistir e incluir da classe UsuarioBLL
Fonte: Elaborado pelo autor.
Em geral, cada uma das classes do namespace KinectFisioterapia.BLL possuem um método que realiza a consistência dos dados que serão enviados para o banco de dados, como o método consistir exibido no Quadro 6. Além desse método específico das classes do
public void consistir(Usuario usuario) {
if (usuario.Login == null || usuario.Login.Trim().Length == 0) { throw new Exception("Login não foi informado.");
}
if (usuario.Senha == null || usuario.Senha.Trim().Length == 0) { throw new Exception("Senha não foi informada.");
}
if (usuario.Fisioterapeuta == null || usuario.Fisioterapeuta.ID == null) { throw new Exception("Fisioterapeuta não foi informado.");
} }
public void incluir(Usuario usuario) { try {
dal = new UsuarioDAL();
dal.incluir(usuario, null, null); } catch (Exception ex) {
throw ex; }
namespace KinectFisioterapia.BLL as classes desse namespace possuem ainda os métodos que possibilitam às classes da camada de apresentação do sistema o acesso aos métodos das classes da camada de persistência do sistema, como por exemplo o método incluir exibido no Quadro 6.
Resta ainda o namespace KinectFisioterapia.UI que possui as classes que compõem a camada de apresentação do sistema. Em sua maioria, as interfaces do sistema correspondem a telas para a realização de cadastros ou consulta de dados cadastrados, sendo exceções a essa regra as classes: LoginUI (responsável pelo login do usuário no sistema), MenuPrincipalUI (responsável por exibir e permitir o acesso as funções existentes no sistema) e ExercicioExecucaoKinectUI (responsável pela comunicação com o Kinect e pela execução dos exercícios cadastrados no sistema). As principais telas do sistema estão apresentadas na Seção 4.4.