Integrating with the MoviesService
Because we’ve ripped our application in two, we need some way to
link the data in the two applications back together. I’ve already
alluded to the idea that a MovieShowtime
object is the “product” of the
MoviesService
, and that the MoviesService
needs to obtain and track
product ids returned from the OrdersService
. To accomplish this, we need to
add a product_id
column to the
movie_showtimes
table, as shown in
Example 16-10. Note that
the column type is text
, rather than
integer
. Just as OrdersService
strives to maintain independence
from its clients, so too should clients add a layer of abstraction
between themselves and the services they consume. Although the product
ids are integers today, they might not be forever.
Since there is no explicit reference to maintain within the movies
database, the schema can be built to be generic enough to support
today’s as well as tomorrow’s needs.
Example 16-10. Modifications to the movie_showtimes table to support an orders service
create table movie_showtimes (
id integer not null
default nextval('movie_showtimes_id_seq'),
movie_id integer not null
references movies(id),
theatre_id integer not null
references theatres(id),
room varchar(64) not null,
start_time timestamp with time zone not null,
primary key (id),
product_id text,
unique(movie_id, theatre_id, room, start_time),
foreign key (theatre_id, room)
references auditoriums(theatre_id, room) initially deferred
);
We also need to instrument the registration ...
Get Enterprise Rails 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.