Есть класс книги.
Вот варианты использования:
- Можно получить контент книги для прочтения ее.
- При редактировании контента, книга сохраняется в БД.
- Книгу можно получить только по заранее известному id (неважно откуда юзер узнает)
- Можно распечатать на принтере. Любую книгу можно печатать.
Что заранее известно:
Никогда в жизни не будет нескольких хранилищ книг, и оно никогда не изменится.
Вот код:
class Book {
private int id;
private String content;
private Database database;
private Printer printer;
public Book(int id) {
database = new Database("table-books");
printer = new Printer();
this.content = database.select(id);
}
public String getContent() {
return this.content;
}
public void setContent(String content) {
this.content = content;
save();
}
public void print() {
// предположим, что тут сложная логика из 15 строк для работы с принтером. Но больше ни один класс печататься не умеет
printer.selectPrinterAndPrint(getContent());
}
public void save() {
// предположим тут сложная логика сохранения в бд, но больше ни один класс не сохраняется
database.updateOrInsert(id, getContent());
}
}
Но как гласит принцип, у класса должна быть только одна причина для изменения.
Получается, что любой чувак из интернетов, кто пишет умные статьи, меня с таким кодом пошлет куда подальше.
Какого черта мне здесь создавать отдельные классы Storage и PrintingSystem ради инкапсуляции логики туда? Если никто больше юзать не собирается их. Какого класс, который юзает Book я должен еще утяжелить знаниями о Storage и PrintingSystem?
Мне кажется, что все эти принципы должны учить только одному - здравому смыслу.
Перемещено leave из talks