Здравствуйте, RolandD, Вы писали:
RD>Есть сущность Entity, размещенная в пакете com.mycompany.entitypackage. RD>У нее есть какие-то черты, которые следует выделить в класс EntityTraits, который потом будет использоваться отдельно от Entity. При этом, EntityTraits связан с Entity, например, не бывает так, чтобы тот кто использует Entity не использовал бы EntityTraits. RD>В каких случаях следует определять EntityTraits как public static class вложенный в класс Entity, какие бы вы выделили критерии для этого? RD>Или же всегда рекомендуется разместить EntityTraits в com.mycompany.entitypackage.EntityTraits?
Обычно получается так. Делается анонимный класс как необходимость решения какой-то задачи внутри класса (Listener, например). Затем этот класс начинает обладать некоторой логикой (получает свои поля и методы). В этом случае уже есть смысл конвертировать анонимный во вложеный. Если вложеный класс сильно связан с внешним классом, то его нельзя переиспользовать, и, логично, оставить его внутри.
Если он слабо связан с внешним классом и его можно переиспользовать. То нужно выносить из класса.
Обратите внимание, что вложеные классы могут быть не static. Тогда их нельзя использовать без экземпляра внешнего класса.
В вашем случае, так как это просто сущности с данными, особой разницы нет. Если EntityTraits регулярно используется без Entity, то нужно делать отдельный класс. Если оно используется только в паре с Entity, то вложеный.
Дизайн: когда имеет смысл использовать вложенные public static классы
Есть сущность Entity, размещенная в пакете com.mycompany.entitypackage.
У нее есть какие-то черты, которые следует выделить в класс EntityTraits, который потом будет использоваться отдельно от Entity. При этом, EntityTraits связан с Entity, например, не бывает так, чтобы тот кто использует Entity не использовал бы EntityTraits.
Вопрос:
В каких случаях следует определять EntityTraits как public static class вложенный в класс Entity, какие бы вы выделили критерии для этого?
Или же всегда рекомендуется разместить EntityTraits в com.mycompany.entitypackage.EntityTraits?