GOOS Book Distilled Part 12

A follow through of the great book Growing Object-Oriented Software, Guided by Tests with code

2 minute read

This is a series of blog posts going through the great book Growing Object Oriented Software Guided By Tests, typing in code chapter by chapter, trying to add some of my own understanding where things may not be easy to grasp in the book. I highly recommand you get a copy of the book and follow along with me. Happy coding.

This post covers Chapter 19 Handling Failure, which is also the last chapter in the book related to this project.

In this chapter We add some error handling logic to the app.

What if it doesn’t work

When the sniper receives a error message from the server, We basically want to achieve the following:

  1. Displays the failure.
  2. Records the failure.
  3. Ignores further updates from the server.

We add a new end-to-end test: Source Code

Detecting the Failure

It is not hard to guess that when the app receives a bad message, the first place to handle it is in the AuctionMessageTranslator. It also needs to notify the failure to its listener.

Source Code

Displaying the Failure

This is also easy, when AuctionSniper receives the auctionFailed() callback from AuctionMessageTranslator, it just change its snapshot’s state and notify.

Source Code

Disconnecting the Sniper

In XMPPAuction, add another listener that when receives auctionFailed(), just remove the AuctionMessageTranslator from the chat.

Source Code

Recording the Failure

Filling in the Tests

We create a ActionLogDriver in ApplicationRunner using Apache Common IO library, so that we have a way to test the existance of a failure log in the system. Source Code

Failure Reporting in the Translator

We create a XMPPFailureReporter to take the responsibility of reporting failure log, and call that when the AuctionMessageTranslator receives a bad message. Source Code

Closing the Loop

Now it’s time to implement the XMPPFailureReporter in the XMPPAuctionHouse. This uses the logger in Java to log message. Source Code

OK, we are done with the Auction Sniper project for now.

~The End~

comments powered by Disqus