{
private final ConfirmationTokenProperties tokenProperties;
/**
* Create new confirmation token for person.
* @param person The target person
* @return The new confirmation token for saving into repository
*/
public ConfirmationToken createConfirmationToken(Person person) {
LocalDateTime createdAt = LocalDateTime.now();
long milliseconds = tokenProperties.getMillis();
LocalDateTime expiresAt = createdAt.plus(milliseconds, MILLIS);
String token = UUID.randomUUID().toString();
ConfirmationToken confirmationToken = ConfirmationToken.builder()
.createdAt(createdAt).expiresAt(expiresAt)
.person(person).token(token).build();
return confirmationToken;
}
}
Сейчас рефакторю код, и хочу вынести создание объектов в отдельные классы (раньше token создавался прямо в коде, по среди метода).
И вопрос: правильно ли называть такой класс - фабрикой (она же вроде строиться на полиморфизме, создании разных типов), или лучше придумать какое-нибудь другое название? Или вообще - есть более элегантный способ в создании "базовых" объектов для сохранения?
как измеряется элегантность?
Наверное, в структурированности и читаемости
Как оцениваешь текущий метод создания обьекта по этим критериям?
Конечно есть, прям in-place, а это извращение. Тогда сразу ListFactory делать, а потому ListFactoryFactory
Забыл бин пост процессор ещё 😄
У тебя это не репозиторий
Почему это архитектурный вопрос) Делай как проще Зачем тебе фабрика? Ты ещё собираешься где-то юзать? Где и как часто? Сколько имплементаций? Одна?) нагородить несколько классов чтобы что? Читаемость якобы? С чего повысится читаемость вместо условного метода в несколько строчек придётся прыгать по фабрике, интерфейсу и имплементации? Чем проще тем лучше. Но это сложнее сделать обычно
Мне удобнее создавать в отдельном классе, т.к. я беру значения для создания токена из property-файла спринга. Я инжекчу в фабрику проперти, а уже фабрику в отдельный сервис. Мне кажется, так и тестировать проще, и какой-то сингл респонсибилити соблюдается
Не спорю Вполне может быть это оправдано
На вид казалось, что это просто фабрика для дтошки. Тогда лучше сделать интерфейс TokenGenerator<T>, где T - тип токена
Обсуждают сегодня