DAO
Data Access Object
Щойно зрозумів, що за риба, DAO.
DAO - це інкапсуляція. Якщо потрібно змінити джерело даних (наприклад, прості файли замінити базою), або сам процес отримання даних(наприклад, після переходу на нові технології) - переписуєм DAO рівень і все. Швидко і безболісно.
Single responsibility зберігається. Бо кожен DAO відповідає лише за одну річ: отримання даних з певного джерела. Раніше я думав, що таким джерелом може бути тільки база даних. Тепер я впевнений, що це може бути будь-що. Наприклад: файл, REST сервіс, будь-який інший сервіс, електро-сигнал, тощо.
З чого складається DAO?
Оскільки призначення DAO - доступ до даних, то DAO мусить ці дані якось віддавати іншим частинам програми. Тому DAO має інтерфейс. Воно скрадається з інтерфейсу і його реалізації. В більшості випадків переписувати прийдеться лише реалізацію. Про реалізацю друзі DAO нічого не повинні знати, їм потрібні лише дані, які вони зможуть використати у своїх цілях.
В якому форматі DAO методи мають повертати дані?
Клієнти DAO можуть теж мінятись. Одні люблять дані в форматі XML, інші в JSON форматі, ще інші не переймаються і просять у відповідь лише текст. Але бідний DAO не повинен мінятись, при зміні клієнтів, він повинен задовольняти загальні потреби суспільства. Тому він віддає свої дані у вигляді POJO (для Java).
Питання: чому саме POJO, JSON теж стандарт?
Відповідь: Окей, але якщо клієнти DAO використовують одну бібліотеку для роботи з JSON (наприклад, org.json), а наш DAO метод повертає дані у JSON форматі використовуючи бібліотеку net.sf.json? Краще хай повертає в POJO, а клієнти з POJO можуть зробити собі все що захочуть...