1. Паттерны как и любые вещи в программировании стоит применять только там, где это требуется, а не абсолютно везде. К каждой задаче нужно подбирать свой инструмент
2. Да это нормальная практика. Но тут нужно понимать как Вы с ними будете работать
3. Думаю не более 3-4, в противном случае будет не очень читабельно и удобно работать.
4. Нет. Для работы с базой данных у Вас должен быть реализовать отдельный класс. А уже сущность должна его использовать для получения данных