Dividir aplicação em Jars para aproveitar em outros projetos

Olá amigos,

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?

Obrigado

Se isso não é uma realidade, vai atrapalhar mais do que ajudar.

Cada aplicação tem sua própria necessidade e valor de serviço.

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.

Obrigado.

Você pode fazer o mesmo com Java. Só questionei a ideia de ficar se preocupando com aplicações futuras, caso estas não estejam planejadas.

Pesquisa sobre packages. Exemplo: https://www.caelum.com.br/apostila-java-orientacao-objetos/pacotes-organizando-suas-classes-e-bibliotecas

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.

Posto a experiência aqui depois.

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?

Exatamente, qualquer plataforma e linguagem atuais.

@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.

Abraços.

Estude arquitetura DDD do Eric Evans, desenvolvimento dirigido pelo domínio. Vai ajudar bastante.