In the previous few chapters, we did a deep dive into several modularity features in Java 9 that enable you to build Java applications with modules. You've learned how to use the dependency declarations and services to establish module dependencies. You've also learned how to use jlink to build modular runtimes that can be distributed. In this chapter, we'll look at a slightly less objective concern--how to build good applications with modules in Java. Now that you've acquired the knowledge to create and use modules, what are the recommended ways to do that? What are the best practices and patterns that you should use? Here's what we'll cover in this chapter:
- Understanding how to design modules--what a module should ideally be and where module boundaries should be drawn
- Understanding how to design good APIs for...