Где разместить метод getAll () при наличии фабрики

StackOverflow https://stackoverflow.com/questions/1019466

  •  06-07-2019
  •  | 
  •  

Вопрос

Я делаю Java-приложение.

Пока это мои файлы:

Персональный интерфейс.

имеет метод setName (String aName)

PersonImpl

Реализация интерфейса Person.

PersonFactory Interface

имеет createPerson ()

PersonFactoryImpl

Реализация интерфейса PersonFactory.

Дело в том, что я был готов добавить метод getAll (), который возвращает коллекцию людей, и я не уверен, где его разместить.

Я думал добавить его как статический метод к PersonImpl или PersonFactoryImpl, но я не уверен.

Какой самый лучший способ?

Спасибо за чтение!

Это было полезно?

Решение

Если предусмотрена другая реализация PersonFactory, должна ли она также предоставлять #getAll? Если это так, он принадлежит интерфейсу ... и тогда он не может быть статическим методом в Java.

Учитывая это, это функция вашего PersonFactory или должна быть абстракция для вашего механизма хранения? Если это так, интерфейс PersonRepository, реализации которого принимают PersonFactory и обеспечивает естественную основу для функций типа getAll, представляется более подходящим. Если нет, то в качестве члена конкретной PersonFactory может подойти достаточно ...

Другие советы

Логичным способом было бы добавить его как статический метод в PersonFactory . Это класс, который генерирует ваши объекты Person , и если он хранит ссылки на все сгенерированные объекты, он должен иметь возможность ответить на ваш API getAll () .

Очевидно, что для каждого объекта Person нецелесообразно знать о других подобных объектах, поэтому этот метод не относится к нему.

РЕДАКТИРОВАТЬ: Учитывая тот факт, что они находятся в базе данных, может быть целесообразно разделить PersonFactory (для чего нужно создать Person объекты) из PersonRepository , который будет фактически обращаться к базе данных (или к какой-либо персистентности) и возвращать объекты Person .

Мне может показаться неловким, что один и тот же класс отвечает как за создание объектов, так и за их выборку из базы данных. При этом, если ваше приложение требует такой тесной связи, это может быть приемлемым.

Фабрика отвечает за управление экземплярами Persons, так что это правильное место для ее размещения. Кроме того, он должен быть нестатичным, как createPerson () .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top