Estou desenvolvendo uma aplicação e percebi que algumas partes dela poderão ser úteis para outras aplicações futuras, como por exemplo o cadastro de pessoas.
É uma boa prática eu criar um projeto que trate todas o cenário do cadastro de pessoas como modelo e persistência e gerar um .jar para ser aproveitado em outros projetos?
Entendo. Você pode me indicar um projeto, do github, por exemplo, onde contemple um projeto que foi desenvolvido com arquitetura distribuída em componentes?
Venho do .net é costumo separar cada camada em um projeto. Estou um tanto confuso.
javaflex, obrigado pela atenção. Vou desenvolver a aplicação, model e persistência em um projeto, que irei gerar em um .jar, o qual pretendo importar em outro projeto, que pode ser Web ou Desktop, onde desenvolverei os controller que utilizam as regras contidas no .jar, assim como faço no .NET.
Se está preocupado mesmo com aplicações futuras, lembre-se que pode ter uma aplicação mobile precisando dessas informações e regras. Certamente seu .jar não vai funcionar na plataforma Android, iOS e Windows Mobile. O ideal pode ser disponibilizar serviços REST de acordo com as necessidades das aplicações client.
Então, eu estava pensando nesta possibilidade da seguinte maneira, ter um .jar com o model, persistência. NO projeto que fosse implementar o Rest eu colocaria esse Jar como dependência, fazendo com que meus recursos utilizassem a implementação do Jar. Do jeito que vc esta falando posso criar um API que exponha recursos, que poderei usar em qualquer plataforma e linguagem. Foi isso que entendi?
@tiagohjava não somente é uma boa prática como bem sendo adotada em inúmeros projetos. O nome disso é “Single Responsability” e é um dos conceitos abordados no S.O.L.I.D e no Clean Code.
Você também pode estudar sobre microservices, pois pode estar indo de encontro a este cenário, fugindo do monolítico. De qualquer forma, é importante que haja separação de responsabilidades, pois é dessa forma que terás um projeto melhor organizado e muito mais fácil de manutenir e/ou implementar novas features.