#class #oop
Вопрос:
поэтому у меня есть вопрос о дизайне класса ООП. Я читал, что мы должны «Говорить, не спрашивайте» и не использовать исключения для «Управления потоком». Однако в данном конкретном случае я вижу, что выполняется некоторый избыточный код!
Предположим, у человека есть список мероприятий, которые он будет посещать, и необходимо обеспечить, чтобы он не мог присутствовать на мероприятии, которое совпадает с его текущим расписанием. Итак, у меня есть следующий Java-код
public class Person { // this arraylist of events must not have overlapping events! ArrayListlt;Eventsgt; eventsToAttend; // checks if a person is free to attend a new event by viewing all events he is attending public boolean canAttendEvent(Event newEvent) { for(int i = 0; i lt; eventsToAttend.size(); i ) { if (newEvent.isSameDayAndTime(eventsToAttend.get(i))) { return false; } } return true; } public void attendEvent(Event newEvent) { // enforce the validity of the newEvent if (!canAttendEvent(newEvent)) { // throw exception and return } eventsToAttend.add(newEvent); } public static main(String[] args) { // just an example usage! Person person = somePersonWithEventsAlready; Event event = new Event(); if (person.canAttendEvent(event)) { // !!! // Notice that canAttendEvent() is called twice!! how do you prevent this? // !!! person.attendEvent(event); } // Alternatively I could just try - catch around person.attendEvent(), but is that bad practise? } }
Проблема, с которой я сталкиваюсь в целом при таком способе ведения дел, заключается в том, что «canAttendEvent()» вызывается дважды. Однако это хорошая практика в соответствии с шаблонами проектирования ООП?
Что было бы лучшим способом сделать что-то подобное? Спасибо, что прочитали это.
Ответ №1:
попробуйте — поймайте в основном лучший способ достичь того, чего вы пытаетесь избежать: дважды вызовите функцию canAttendEvent
Комментарии:
1. Хорошо, как вы думаете, метод try-catch лучше или оставить все как есть прямо сейчас?