2016-03-22 5 views
0

Я новичок в ООП и «дизайн»/«архитектура». У меня есть класс, который работает с объектом Crawler (результат запроса GET с использованием Goutte), чтобы выяснить, присутствуют ли на странице различные элементы.ООП и дизайн: хорошее место для уведомлений

У этого метода есть методы isHtml5 или getAnalyticsCode.

Чтобы предоставить более удобные для пользователя уведомления, я установил в каждом методе сообщение с уведомлением об итогах проверки.

Например, если doctype не HTML5, то в пределах isHtml5 есть что-то вроде этого: $this->setNotification('Page is not HTML5').

Я получаю уведомления постепенно для отображения в представлении в пределах Controller.

Чем больше я думаю об этом классе, тем больше мне кажется, что эти уведомления там не принадлежат. Но я не знаю, куда их положить.

Я думал о контроллере, но если я хочу использовать другие адаптеры, т.е. Командная строка или API, то у меня будет дублирование этих уведомлений через все apdaters. Но, может быть, это не так плохо ... (Я также смущен о возможных переводах этих уведомлений и о том, как это сделать, но пока я далеко не в дизайне).

Любые идеи или предложения? Ресурсы, на которые я должен обратить внимание? Если возможно, я был бы признателен за что-то совершенно «простое», чтобы у меня был чистый код и чтобы я не заблудился, чтобы начать с него (у меня уже есть склонность к чрезмерному усложнению вещей ... ^^).

Заранее спасибо.

ответ

1

Существует множество способов решения проблемы, и все они могут считаться хорошими. В зависимости от требования иногда простые (и логически обоснованные), но не очень хорошие проекты могут быть лучше, чем очень сложные (перегруженные) проекты.

Я бы настоятельно рекомендовал Headfirst OO Design. Я думаю, что это хороший ресурс для промежуточного/продвинутого уровня.

Что касается текущей проблемы, я думаю, что следующий дизайн может быть хорошим кандидатом.

A Notification Class: //Depending upon implementation, This can be private to notification service class 

private notificationType; 
private notificationMessage; 
private notificationPriority; 
//Or just the message 
//All Getters and Setters 

A NotificationService class: 
private List<Notification> notifications; //Can be LinkedList 
static getInstance(); 

// To create and add notification to list 
public void addNotification(String msg); // Can have other items too.. 

//get the copy of list for printing or other purposes 
public List getNotifications(); 

Это не сложно. Опять же, дизайн зависит от вашей проблемной области. То же самое можно сделать, создав интерфейс Notification, а затем создав различные классы, реализующие этот интерфейс - для каждого типа уведомлений и класс главного менеджера/службы, обрабатывающий все.

Поскольку у вас «есть склонность к чрезмерному усложнению вещей ...», всегда лучше иметь дизайн, в котором ничто не может быть удалено.

Смежные вопросы