Да, такие вещи довольно классические. Самое простое - применить другое правило. мой любимый закон Парнаса: каждый объект «скрывает» что-то, что может измениться в требованиях к его интерфейсу.
Хорошо, ясно, что у Сотрудника есть TimeCard, который представляет собой упорядоченный по времени список времени начала и окончания.
Когда вы "входите" в домен , все, что вы делаете, - это запись "начала времени". Такие звуки, как «вход и выход» могут быть методами TimeCard, и если мы подумаем об этом, это также скрывает возможные изменения требований (например, является ли это записью в базе данных, строкой в плоском файле и Вы храните местное время, время по Гринвичу или UNIX?)
Сотрудник является представителем сотрудника и содержит всю эту информацию, относящуюся к сотруднику; имя, адрес и т. д.
Пока что нет очевидной необходимости в TimeClock, кроме как «реализация» включения и выключения во внешнем мире.
Теперь, когда вы создаете приложение, но должны собираться из домена, и теперь вам понадобится какой-то пользовательский интерфейс, способ аутентификации (установления, какого сотрудника вы хотите) и оттуда получите TimeCard сотрудника - - который предлагает метод для сотрудника. Тогда вам нужно место для «входа» и «отключения» в пользовательском интерфейсе. Это звучит так, как будто ваш timeClock вполне может быть объектом View в реализации. Требуется пара кнопок и какой бы ни был ваш протокол входа в систему.
Еще одна часть здесь - это «бизнес-процесс» или «сначала войдите в систему, затем войдите в систему. Позже выйдите из системы, затем выйдите из системы» или что-то подобное. Там есть контроллер; то, как вы это разделите, зависит от того, как вы работаете с пользовательским интерфейсом.