ENGLISH

Real-World Software Development: A Project-Driven Guide to Fundamentals in Java

Book information

Publisher
O'Reilly Media
Year
2019
ISBN
149196717X, 9781491967171
Language
english
Format
PDF
Filesize
6 MB (6771896 bytes)
Edition
1
Pages
202\203
Time added
2021-11-08 14:27:46

Description

Explore the latest Java-based software development techniques and methodologies through the project-based approach in this practical guide. Unlike books that use abstract examples and lots of theory, Real-World Software Development shows you how to develop several relevant projects while learning best practices along the way. With this engaging approach, junior developers capable of writing basic Java code will learn about state-of-the-art software development practices for building modern, robust and maintainable Java software. You’ll work with many different software development topics that are often excluded from software develop how-to references. Featuring real-world examples, this book teaches you techniques and methodologies for functional programming, automated testing, security, architecture, and distributed systems. Copyright Table of Contents Preface Why We Wrote This Book A Developer-Oriented Approach What’s in the Book? Who Should Read This Book? Conventions Used in This Book Using Code Examples O’Reilly Online Learning How to Contact Us Chapter 1. Starting the Journey Themes Java Features Software Design and Architecture SOLID Testing Chapter Summary Iterating on You Chapter 2. The Bank Statements Analyzer The Challenge The Goal Bank Statements Analyzer Requirements KISS Principle final Variables Code Maintainability and Anti-Patterns God Class Code Duplication Single Responsibility Principle Cohesion Class-Level Cohesion Method-Level Cohesion Coupling Testing Automated Testing Using JUnit Code Coverage Takeaways Iterating on You Completing the Challenge Chapter 3. Extending the Bank Statements Analyzer The Challenge The Goal Extended Bank Statements Analyzer Requirements Open/Closed Principle Creating an Instance of a Functional Interface Lambda Expressions Interfaces Gotchas God Interface Too Granular Explicit Versus Implicit API Domain Class or Primitive Value? Multiple Exporters Introducing a Domain Object Defining and Implementing the Appropriate Interface Exception Handling Why Use Exceptions? Patterns and Anti-Patterns with Exceptions Guidelines for Using Exceptions Alternatives to Exceptions Using a Build Tool Why Use a Build Tool? Using Maven Using Gradle Takeaways Iterating on You Completing the Challenge Chapter 4. The Document Management System The Challenge The Goal Document Management System Requirements Fleshing Out the Design Importers The Document Class Attributes and Hierarchical Documents Implementing and Registering Importers The Liskov Substitution Principle (LSP) Alternative Approaches Making Importer a Class Scoping and Encapsulation Choices Extending and Reusing Code Test Hygiene Test Naming Behavior Not Implementation Don’t Repeat Yourself Good Diagnostics Testing Error Cases Constants Takeaways Iterating on You Completing the Challenge Chapter 5. The Business Rules Engine The Challenge The Goal Business Rules Engine Requirements Test Driven Development Why Use TDD? The TDD Cycle Mocking Adding Conditions Modeling State Local Variable Type Inference Switch Expressions Interface Segregation Principle Designing a Fluent API What Is a Fluent API? Modeling the Domain Builder Pattern Takeaways Iterating on You Completing the Challenge Chapter 6. Twootr The Challenge The Goal Twootr Requirements Design Overview Pull-Based Push-Based From Events to Design Communication GUI Persistence The Hexagonal Architecture Where to Begin Passwords and Security Followers and Twoots Modeling Errors Twooting Creating Mocks Verifying with Mocks Mocking Libraries SenderEndPoint Positions The equals and hashcode Methods The Contract Between equals and hashCode Takeaways Iterating on You Completing the Challenge Chapter 7. Extending Twootr The Challenge The Goal Recap Persistence and the Repository Pattern Designing the Repositories Query Objects Functional Programming Lambda Expressions Method References Execute Around Streams Optional User Interface Dependency Inversion and Dependency Injection Packages and Build Systems Limitations and Simplifications Takeaways Iterating on You Completing the Challenge Chapter 8. Conclusion Project-Based Structure Iterating on You Deliberate Practice Next Steps and Additional Resources Index About the Authors Colophon

Similar books