Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The design smell is that we use three separate repositories
(or four, if you include the accommodation history dictionary)
and three different data-types. They share nothing:

...

In a real repository pattern implementation, this would be handled
in a very different manner. The interfaces for each data type
would be separate, but behind the scenes they would be refactored
and share data. For example, a single record could represent
ReservationInfo OR AccommodationInfo OR QueueInfo OR
a single "count" in the accommodation history. After all, each
of those data types has SOME of the following elements:

...

... but never all three. So always the same type in a single
table can be used, and viewed appropriately through the prism
of the correct interface:

...

In a real application, the repository would almost always
be implemented via an O/R mapper. Using the O/R mapper, one
would map all of those repositories to the same table – or not.
It does not matter here.

The unrefactored manner of our repository implementation results in
some code duplication, but not for the core
features of the sample application.