Скажем, дизайн моего приложения таков, что есть два класса: Person
и Company
. Также предположим, что я определил UML-диаграмму, определяющую отношение «один ко многим» между Person
и Company
: каждый объект Person
должен принадлежать ровно одному Company
, а Company
может содержать множество Person
.
Каковы некоторые рекомендации по обеспечению того, чтобы это простое ограничение всегда выполнялось, т. е. чтобы никогда не было момента времени, когда объект Person
содержался более чем в одном Company
? Я думал о трех подходах:
Совершенный код без ошибок, который никогда не нарушает мои ограничения. Однако, будучи реалистом, я знаю, что это сложно или невозможно, тем более, что количество ограничений растет.
Реализуйте метод
ensureCorrectness()
, который вручную проверяет каждое ограничение. В этом примере он перебирает всеPerson
и убеждается, что ровно одинCompany
содержит этотPerson
. В противном случае он напечатает ошибку. Я бы вызывал этот метод время от времени.Используйте, например, Hibernate для определения схемы базы данных и сохранения данных в базе данных. В схеме я могу определить ограничение, соответствующее ограничениям на моей диаграмме UML. Затем всякий раз, когда я сохраняю данные в базе данных, Hibernate проверяет все ограничения и выводит ошибку, если что-то пошло не так.
Но я не могу не задаться вопросом, есть ли другой, более чистый способ сделать это в Java, который не полагается на (1) совершенство, (2) ручную проверку или (3) реляционную базу данных. Есть ли библиотека или фреймворк, которые позволили бы мне указать аннотации в коде, подобном:
@OneToMany(Person, Company)
Или, может быть, более конкретно:
@OneToMany(Person, Company.persons)
предполагая, что класс Company
имеет переменную-член List<Person> persons
.
И если бы я хотел убедиться, что номер социального страхования человека уникален для всех Person
, я мог бы сказать:
@Unique(Person.SSN)
Есть ли что-нибудь подобное для Java?