Что такое сущность?
У сущностей есть две основные характеристики: одна — уникальная идентификация, а другая — непрерывность.
-
Уникальный знак: Когда какой-то объект определяется не атрибутами, а уникальным идентификатором, мы можем считать его сущностью. Например, мы не можем однозначно определить местонахождение человека по его внешним характеристикам, потому что внешние характеристики людей меняются от детства к взрослой жизни, от юности к старости. Идентификационный номер может пройти через всю жизнь человека, не меняясь. Более того, уникальный идентификатор не обязательно должен быть представлен только одним атрибутом.Определить уникальный объект можно по нескольким атрибутам, как и совместный внешний ключ в базе данных (возможен случай, когда сущность определяется однозначно по телефону и имени).
-
Непрерывность: Непрерывность объекта отражается в том, что объект имеет жизненный цикл. В течение этого времени жизни свойства внутри объекта могут измениться. Как и таблица банковских счетов, она принадлежит объекту.Номер банковской карты пользователя может однозначно идентифицировать счет человека, а баланс на счете меняется со временем (проценты) или изменяется при транзакциях.
Но сущность не обязательно должна быть чем-то конкретным, что соответствует нашему реальному миру. Сущность может быть человеком, автомобилем, транзакцией или гонкой. Пока они удовлетворяют двум условиям: первое: она непрерывна на протяжении всего своего жизненного цикла, то есть изменяется. Обычно это можно понимать как таблицу с информацией о пользователе в базе данных, и с информацией о пользователе произойдут некоторые изменения. Мы не будем изменять таблицу журнала операций в системе, и нам не нужно однозначно идентифицировать журнал операций. Второе: его различение не отличается никакими атрибутами, кроме уникальной идентификации. Например, в базе данных есть таблица банковских счетов, в которой есть три поля: номер карты, баланс и тип счета. Мы различаем каждый счет не по балансу и типу счета, чтобы отличить банковский счет, а по уникальному номеру банковской карты.
Сущности появляются не только в одной таблице или в одной библиотеке, но даже в разных системах. Когда нам нужно различать объекты, модель сущности должна определять, какие условия выполняются, чтобы считаться одной и той же транзакцией. Например, пользователь в системе Alipay и пользователь в банковской системе хотят пройти и получить кредит пользователя, так как же они узнают, что немного проточной воды в Alipay и немного проточной воды в банке принадлежат определенному человеку? В это время может потребоваться использовать удостоверение личности открытия банковского счета и удостоверение подлинности подлинности имени Alipay в то время для проверки.
твердотельное моделирование
public class Customer {
private Long customerID;
private String name;
private String phone;
// 余额
private String balance;
// 会员等级
private String vipLevel;
}
Мы можем внести соответствующие изменения в приведенное выше моделирование клиента.Подумайте о нашем наиболее фундаментальном понимании сущностей.Основная цель сущностей - идентифицировать вещи в определенной области. В приведенном выше примере ни баланс, ни уровень членства не могут фактически идентифицировать пользователя, и хотя поле имени не является уникальным, мы часто используем его для идентификации учетных записей. Телефон уникален, потому что регистрационный телефон уникален. Так что по факту мы можем не только идентифицировать пользователя по CustomerID, но и найти пользователей по имени и телефону. Таким образом, наша рекомендация состоит в том, чтобы помочь идентифицировать свойства объекта предметной области, которые мы помещаем в сущность.
Таким образом, в приведенном выше примере мы можем переместить поля balance и vipLevel из класса сущностей Customer в другие связанные объекты и выполнять обязанности через эти связанные объекты.
public class Customer {
private Long customerID;
private String name;
private String phone;
}
Четыре способа генерации уникальных идентификаторов для сущностей
- Когда пользователь предоставляет одно или несколько начальных уникальных значений в качестве входных данных, например, при регистрации учетной записи, введите собственное имя пользователя, адрес электронной почты или номер телефона и т. д. Наша система должна гарантировать уникальность этого значения.
- Внутри программа автоматически генерирует идентификатор с помощью определенного алгоритма, такого как UUID, идентификатор снежинки и другие механизмы для создания уникального алгоритма.
- Программа использует постоянное хранилище, такое как самоувеличивающийся первичный ключ, сгенерированный базой данных.
- Уникальный идентификатор, определяемый другими ограниченными контекстами в качестве входных данных для программы.
В особом случае наша сущность использует два атрибута для идентификации объектов, подобно объединенному первичному ключу в таблице базы данных, но наша структура базы данных, такая как Hibernate или Mybatis, может фактически использовать таблицу для изменения данных в таблице. Поле id в метод такой, как updateByPrimaryKey (), В настоящее время мы можем позволить сущности наследовать абстрактный класс с атрибутом id для решения вышеуказанных проблем.
public abstract class IdentifiedDomainObject implements Serializable {
private long id;
protected long getId() {
return id;
}
protected void setId(long id) {
this.id = id;
}
}
Неизменяемость сущностей.
Иногда сущность поддерживает одно или несколько постоянных условий, которые обычно понимаются как правила нашей бизнес-логики, например, сумма оплаты заказа не может быть больше общей суммы товаров и не может быть отрицательной. Сущность должна поддерживать эту согласованность на протяжении всего своего жизненного цикла, иначе она неверна. Инвариантные условия в первую очередь касаются агрегаций (подробнее об этом позже). Нам также может потребоваться проверить, соответствуют ли атрибуты сущности нашим требованиям, например, не быть нулевыми, не быть пустой строкой, иметь длину не более 100, соответствовать определенным форматам и т. д. Мы можем различать при заполнении параметров объекта.