My program's Journal consists of unique Pages identified by their Day. Within those pages are a collection of Entry (wrapped in an interface of their own, Entries).Users will be directly interacting with unique Pages supplied by the Journal upon passed an instance of Day.Within those Page he/she could opt to change the weather felt on that Day (but not the Day itself) plus add, remove, or edit an Entry.The Entry itself is no more than a combination of Title and Body. Each Page can have as many of Entry as the user wants as long as they're unique to one another within itself. An Entry's uniqueness is determined by their Title (similar Body is completely fine).Journal.javapublic interface Journal extends Iterable<Page>, Serializable {  Page pageFor(Day day);}Page.java (Entries is just List<Entry> but with maintained uniqueness)public interface Page extends Entries {  Day day();}Day.java (Weather is just an ordinary enum)public interface Day extends Serializable {  Date date();  Weather weather();  void changeWeather(Weather newWeather);}Entry.javapublic interface Entry extends Serializable {  Title title();  void changeTitle(Title newTitle);  Body body();  void changeBody(Body newBody);}Throughout the process of designing this model my main goal has always been to make components as loosely-coupled as possible. But as with any beginner, I have my doubts:Is this way of composition correct? Should a page know how to change the Weather of a Day it's related to instead?How to correctly create an Entry to my Page? Should it has some method called createEntry(Title, Body) or would an add(Entry) be enough?How to make this model more immutable? I want everything in my program-to-be as immutable as they could, but the nature of Day is to have changeable Weather or in other word, mutable.Also, if you have any suggestions on how to improve this overall model, please don't hesitate to speak it through.
Interface modelling for a journaling program in Java
java;object oriented;interface