Skip to content

waltereidi/Open-file-renamer

Repository files navigation

Open file renamer

  1. História do open file renamer
  2. Arquitetura
  3. Instruções para desenvolvimento
  4. Post mortem

 

1. Open file renamer

Queremos uma aplicação que dê uma ferramenta gratuita e de código aberto para auxiliar operações comuns do dia a dia de quem precisa organizar uma grande quantidades de arquivos.
[Download](https://drive.google.com/file/d/155v-SYu8Wtzxqv2hS4F0Yms0r-RD_5Ul/view?usp=sharing)

 

2. Arquitetura

Sua arquitetura foi planejada para ter um backend que comporte várias interfaces de usuário pertencentes á linguagem C# e .NET, todas as respostas da camada de presentação devem ser entregues pela camada de serviço e a camada de serviço se comunica e organiza todos os micro-serviços.

Estrutura da camada de Aplicação : 

Services 

Services “Serviços que fazem a orquestração de solicitações da presentação e micro-serviços”
Contracts “Contratos de comunicação que devem ser atendidos pela camada de presentação”
DAO “Objetos de acessos á dados, aqui se delega o máximo que se pode de lógica utilizada nos componentes da presentação”
DTO “Classes magras utilizadas para armazenar estrutura de dados comuns”
Enum “Páginas do tipo Enum”
Interfaces “Interfaces utilizadas na camada de serviço e presentação”
Value Objects “Objetos imutáveis que estabelecem a linguagem ubiqua para símbolos utilizados no projeto”

Estrutura do micro serviço File Manager

File Manager

File Manager “Aqui deve ficar páginas cujo a chamada pertence á serviços externos”
DAO “Objetos que fazem acesso á dados externos”
DirectoryOperations “Operações destinados apenas á leitura de diretórios”
File Operations  “Operações que modificam arquivos físicos”
— — Append “Adicionar caracteres”
— — NumberedSequence “Sequencia numérica”
— — Pattern “Padrão de substituição de caracteres”
— — Remove “Remoção de caracteres”
Interfaces “Interfaces”

 

3. Instruções para desenvolvimento

Acesso á arquivos físicos : 

O acesso de arquivos físicos deve ser feito através da classe FileManager.DAO.FileIdentity, o acesso deve ser uma única fonte da verdade e imutável, desta forma será possível facilitar as operações de rollback , renomeação de arquivos  e leitura. 
É importante notar que a classe FileIdentity deve ser interpretada como uma identidade única para o arquivo antes e depois de modificar seu nome, enquanto ainda estiver no mesmo diretório, desta forma será possível encontrá-lo para retornar á sua última versão.
A pratica de utilização de ValueObjects vai evitar sinónimos e vários bugs durante o processo de desenvolvimento.
( referencias "Desenvolvimento guiado por testes TDD, Kent Beck ISBN 978-85-7780-747-5 ")

 

Adicionar novas operações de renomeação de arquivos : 
 

1 -Adicione uma operação de renomear arquivos : 

Novas operações de renomeação devem utilizar-se da classe base : FileManager.FileOperations.FileProcessor, a classe utiliza o padrão GOF "Strategy" e é implementada á classe FileManager.FileOperations.FileWriter.
O método abstrato GetRenameTo() deve retornar o novo nome de arquivo que será implementado em preview, renomeação e rollback de nome de arquivo, adicione ao construtor desta classe as dependencias da classe pai e demais variáveis necessárias para construir o novo nome do arquivo.
Importante : Utilize os atributes da classe pai “FileNameBefore” e “FileExtensionBefore” para reconstruir o nome do arquivo.
 

2 - Implemente a operação de renomear arquivo em FileManagerService 

A classe FileManager.FileManagerService deve implementar todas as operações que estão expostas á camada de serviço, Operações de Leitura de arquivos devem estar contidas na interface IDirectoryReader e Operações relacionadas ao versionamento de arquivos na interface IVersionControl. 
Note que todas as operações que modificam o nome de arquivos estão isentas de interface mas são intermediadas pela interface IMementoFileManager, que implementa o Design Pattern GOF Memento para armazenar a última modificação de arquivo feita.
 

3 - Adicione uma chamada á o serviço implementado no projeto FileManager na camada de serviço

Agora faça a implementação necessária para utilizar o serviço na camada de serviço, pode-se utilizar das implementações já existentes ou delegar da forma que for necessário a camada de presentação.
 

 

Camada de Presentação Windows Forms

 

1 - Filtros 
 

Implemente novos tipos de filtros enviando um evento para o método privado : searchFilter_Changed da classe Presentation.Main,
adicione um novo tipo de Enum em ApplicationService.Enum.Main_SearchFilter e implemente uma nova leitura de diretórios no projeto FileManager com a interface FileManager.Interfaces.IDirectoryReader
 

2 - Preview e Renomeação de arquivos

Interfaces 

ITabControlWrapper :Interface que recebe todas as Tabs de file preview e rename e envia um IOperationContract para a camada de serviço retornar a operação de preview ou rename de arquivos.
 

ITabControl : Interface que é utilizada na design pattern Strategy com finalidade de delegar a opções escolhidas de reanomeação de arquivo e convertelas para a interface IOperationContract
 

IOperationContract : É o contralo estabelecido para organizar os dados necessários para solicitar uma utilização de renomeação de arquivos fornecida pela camada de serviço, todas as chamadas de file rename devem implementar esta interface.

 

3 - Rollback de renomeação 

A implementação atual envia o nome do diretório e refaz a ultima operação armazenada no memento do File Manager

 

 

Micro Serviço File Renamer

Todas as operações que modificam arquivos devem passar pelo Memento antes de serem iniciadas, isto inclui também operações de Rollback.
Operações referentes á apenas leitura de arquivos podem ser isoladas em uma classe separada e não precisam passar pelo memento.
 


4. Post mortem

Após a conclusão do projeto foi possível ver problemas comuns em projetos pequenos com a finalidade de leitura e escrita de arquivos.
 

Planejamento para varias interfaces de usuário : 
Foi  possível verificar que embora a leitura e escrita de arquivos utiliza-se uma classe comum para abstrair suas funcionalidade de alto nível, a implementação carece de formas de substituir sua implementação, desta forma não foi possível trocar o metodo de acesso á dados sem comprometer todos as implementações já existentes.
Isto foi notado após implementar toda a interface com .NET Maui e ter debugado apenas no windows, quando depurado em android,  já não é mais possível ler ou modificar arquivos com a mesma classe FileInfo e DirectoryInfo

Delegar parte da logica da interface de usuário para a camada de serviço : 
A camada de serviço ao decorrer do projeto acabou fazendo parte da lógica de delegação de dados da interface de usuário,
desta forma a interface do .NET Maui já nasceu com um modelo para ser atendido.

Modificação de última hora na forma de ler arquivos : 
O projeto iniciou com o acesso á leitura de arquivos com uma única fonte da verdade (SSOT), e foi possível de última hora definir a Identidade do arquivo como uma TimeStamp em vez do nome completo do arquivo e diretório,  isto permitiu implementar o rollback de versão com um ponto negativo: modificando a data de criação do arquivo para criar uma identidade única para este arquivo com TimeStamp.Ticks .
 

Implementação de UI com tecnologia .NET MAUI 

Foi iniciado os estudos de implementação de uma interface multi aplicação com a tecnologia .NET MAUI na versão .NET 9 community ToolKit e visual Studio 2022 Preview. 
Embora o projeto estivesse funcionando normalmente na versão Windows não foi possível publicar a pacote MSIX, havendo diversos bugs relatados na internet sobre a dificuldade de publicação para a Microsoft Partner.
 

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages