Сервисный уровень сам по себе не является анти-паттерном, это очень разумное место для размещения определенных элементов вашей бизнес-логики. Тем не менее, вам необходимо применить осторожность к дизайну сервисного уровня, гарантируя, что вы не крадете бизнес-логику из своей доменной модели и объектов, которые ее составляют.
Тем самым вы можете получить истинную анти-модель, модель анемичного домена.
Это подробно обсуждается Мартином Фаулером здесь .
Ваш пример IAuthenticationService, возможно, не лучший для обсуждения проблемы - большая часть логики вокруг аутентификации может рассматриваться как живущая в службе и не связанная с объектами домена. Лучшим примером может быть, если у вас был какой-то IUserValidationService для проверки пользователя или, что еще хуже, служба, выполняющая что-то вроде заказов процессов - служба проверки удаляет логику из объекта пользователя, а служба обработки заказов забирает логику из объекты вашего заказа, а также, возможно, объекты, представляющие клиентов, уведомления о доставке и т. д. *