14.5. Generality

Sam's system was created specifically for CDDiscs. You can use the underlying design for any system that needs to keep track of rentals of identifiable items. CDDisc can be generalized to RentableItem, which represents any rentable item that has a unique identity. CDRelease can be changed to CatalogItem, which represents a type of item identified by a UPC code. RentableItems are physical copies of CatalogItems. The RentalOperations interface, with RentableItems substituted for CDDiscs, provides the necessary operations. The specific methods in the CatalogOperations, just as searching by the recording artist, are not applicable to RentableItems. However, the separation of RentalOperations from CatalogOperations is generally applicable.

If we had tried in the beginning to make Sam's system general, we could have been bogged down in endless details. For example, the pricing mechanism for Sam's system was simple: three prices for three different categories of CDReleases and fixed rental periods. For a general system, the pricing would probably vary based on the rental period.

With Sam's system, we gained an understanding of the issues involved in rentals. Armed with the experience gained in developing that system, we could now tackle a more general problem such as a universal rental system or another industry-specific rental system.

Get Prefactoring now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.