Я пытаюсь разработать API, который включает в себя регистрацию транзакции в системе.Затем система сгенерирует идентификатор транзакции, который однозначно идентифицирует транзакцию.
Я хотел бы определить класс транзакции как неизменяемый, например:
public class Transaction {
private final double quantity;
private final BigDecimal price;
public Order(double quantity, BigDecimal price) {
this.quantity = quantity;
this.price = price;
}
public double getQuantity() {
return quantity;
}
public BigDecimal getPrice() {
return price;
}
}
Клиент вызывает APIдля создания новой транзакции:
public void storeTransaction(Transaction t)
Но если я сделаю это, как я могу сохранить сгенерированный идентификатор транзакции?
1.Опция 1
Я могу добавить изменяемое состояние в класс транзакции:
public class Transaction {
private final double quantity;
private final BigDecimal price;
private String transactionID;
public Order(double quantity, BigDecimal price) {
this.quantity = quantity;
this.price = price;
}
public double getQuantity() {
return quantity;
}
public BigDecimal getPrice() {
return price;
}
public String getTransactionID() {
return transactionID;
}
public void setTransactionID(String id) {
transactionID = id;
}
}
Но это сделает класс транзакции изменчивым.
Опция2
Я могу продолжать использовать неизменяемую транзакцию и выставлять API следующим образом:
public String storeTransaction(Transaction t)
Таким образом, вместо сохранения идентификатора транзакции в классе транзакции, я мог бы вернуть его внаш пользователь API.Но это также не выглядит идеально для меня, потому что пользователь должен поддерживать отношение ID-> Transaction.
Какова наилучшая практика для разработки сценария такого типа?