• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Considering Java Modules for Better Project Structure—Need Advice

 
Greenhorn
Posts: 16
1
  • Number of slices to send:
    Optional 'thank-you' note:
Hi,

I have been writing Java using packages for years now, and it has worked very well. However, ever since I started training for the OCP, I've read a lot about Java Modules, and now I'm starting to think I might be missing out on a valuable feature of Java.

Let's say we have a simple API with these packages:
  • model
  • repository
  • service
  • controller


  • Do you think it is a good idea to create separate modules for each package? Additionally, since I like using Gradle or Maven, do they work well with Java Module feature?

    What do you guys think about this?

     
    Saloon Keeper
    Posts: 15608
    366
    • Number of slices to send:
      Optional 'thank-you' note:

    Mert Y. Ertugrul wrote:HI've read a lot about Java Modules, and now I'm starting to think I might be missing out on a valuable feature of Java.


    I'm a big fan of modules. I'm happy you're giving them a shot.

    Do you think it is a good idea to create separate modules for each package?


    No, for two reasons.

    First, modules don't have a one-to-one relationship with packages. A module may contain exactly one package, and while this is indeed often the case, there could be good reasons for a module to contain more than one package. Blindly creating a separate module per package is not a good idea. Some thought and planning is always required.

    Secondly, you are using packages wrongly. A package is a collection of classes that depend strongly on each other. A class might want to access package private members of another class that is in the same package.

    Instead, you seem to have divided your classes over packages based on how much the classes resemble each other, not how strongly the classes depend on each other. Why does a UserAccountController (for example) need to be in the same package as a ProductCategoryController (another example). Sure, they're both controllers, but neither of them has anything to do with the other.

    Instead, you might want to have a package com.example.shop.user that contains the classes related to users and user accounts, and a package com.example.shop.product that contains the classes related to products and product categories. Web API controllers and the request and response types could be in com.example.shop.web.user and com.example.shop.web.product.


    Modules then contain all the packages that an application might want to use together. It's unlikely that you'll want to use com.example.shop.user in an application, but not com.example.shop.product. On the other hand, you could put com.example.shop.user in a different module than com.example.shop.web.user, because the controllers are only used in a web application, while the model classes might also be used in a client application or administrative tool.

    So we could have the following two modules:


    Additionally, since I like using Gradle or Maven, do they work well with Java Module feature?


    Yes. There's no issue in using these tools together with JPMS modules.
     
    reply
      Bookmark Topic Watch Topic
    • New Topic
    vceplus-200-125    | boson-200-125    | training-cissp    | actualtests-cissp    | techexams-cissp    | gratisexams-300-075    | pearsonitcertification-210-260    | examsboost-210-260    | examsforall-210-260    | dumps4free-210-260    | reddit-210-260    | cisexams-352-001    | itexamfox-352-001    | passguaranteed-352-001    | passeasily-352-001    | freeccnastudyguide-200-120    | gocertify-200-120    | passcerty-200-120    | certifyguide-70-980    | dumpscollection-70-980    | examcollection-70-534    | cbtnuggets-210-065    | examfiles-400-051    | passitdump-400-051    | pearsonitcertification-70-462    | anderseide-70-347    | thomas-70-533    | research-1V0-605    | topix-102-400    | certdepot-EX200    | pearsonit-640-916    | itproguru-70-533    | reddit-100-105    | channel9-70-346    | anderseide-70-346    | theiia-IIA-CIA-PART3    | certificationHP-hp0-s41    | pearsonitcertification-640-916    | anderMicrosoft-70-534    | cathMicrosoft-70-462    | examcollection-cca-500    | techexams-gcih    | mslearn-70-346    | measureup-70-486    | pass4sure-hp0-s41    | iiba-640-916    | itsecurity-sscp    | cbtnuggets-300-320    | blogged-70-486    | pass4sure-IIA-CIA-PART1    | cbtnuggets-100-101    | developerhandbook-70-486    | lpicisco-101    | mylearn-1V0-605    | tomsitpro-cism    | gnosis-101    | channel9Mic-70-534    | ipass-IIA-CIA-PART1    | forcerts-70-417    | tests-sy0-401    | ipasstheciaexam-IIA-CIA-PART3    | mostcisco-300-135    | buildazure-70-533    | cloudera-cca-500    | pdf4cert-2v0-621    | f5cisco-101    | gocertify-1z0-062    | quora-640-916    | micrcosoft-70-480    | brain2pass-70-417    | examcompass-sy0-401    | global-EX200    | iassc-ICGB    | vceplus-300-115    | quizlet-810-403    | cbtnuggets-70-697    | educationOracle-1Z0-434    | channel9-70-534    | officialcerts-400-051    | examsboost-IIA-CIA-PART1    | networktut-300-135    | teststarter-300-206    | pluralsight-70-486    | coding-70-486    | freeccna-100-101    | digitaltut-300-101    | iiba-CBAP    | virtuallymikebrown-640-916    | isaca-cism    | whizlabs-pmp    | techexams-70-980    | ciscopress-300-115    | techtarget-cism    | pearsonitcertification-300-070    | testking-2v0-621    | isacaNew-cism    | simplilearn-pmi-rmp    | simplilearn-pmp    | educationOracle-1z0-809    | education-1z0-809    | teachertube-1Z0-434    | villanovau-CBAP    | quora-300-206    | certifyguide-300-208    | cbtnuggets-100-105    | flydumps-70-417    | gratisexams-1V0-605    | ituonline-1z0-062    | techexams-cas-002    | simplilearn-70-534    | pluralsight-70-697    | theiia-IIA-CIA-PART1    | itexamtips-400-051    | pearsonitcertification-EX200    | pluralsight-70-480    | learn-hp0-s42    | giac-gpen    | mindhub-102-400    | coursesmsu-CBAP    | examsforall-2v0-621    | developerhandbook-70-487    | root-EX200    | coderanch-1z0-809    | getfreedumps-1z0-062    | comptia-cas-002    | quora-1z0-809    | boson-300-135    | killtest-2v0-621    | learncia-IIA-CIA-PART3    | computer-gcih    | universitycloudera-cca-500    | itexamrun-70-410    | certificationHPv2-hp0-s41    | certskills-100-105    | skipitnow-70-417    | gocertify-sy0-401    | prep4sure-70-417    | simplilearn-cisa    |
    http://www.pmsas.pr.gov.br/wp-content/    | http://www.pmsas.pr.gov.br/wp-content/    |