Хорошо, я отвечаю как за сервер, так и за клиента (используется внутри) в этой архитектуре RESTful. (используя рестлет).
У нас есть ресурс, который предоставляет операцию Post. Вот упрощенная версия:
public class UserResource {
@Post
public Representation create(UserRegistration registration) {
SomeService.getInstance().createUser(registration);
return new XstreamRepresentation(new RegistrationResponse(registration.getUniqueCode()););
}
В течение нескольких месяцев мы были единственными, кто использовал эти сервисы, поэтому доменные объекты были разделены между клиентской и серверной сторонами ... и это работало просто отлично.
Теперь, когда мы должны документировать эти ресурсы и позволить другим клиентам использовать их, возникают некоторые "проблемы", которые заставляют меня думать, что этот API может быть слишком сложным.
Этот почтовый сервис, например.
Внутренний метод принимает сложный тип UserRegistration
public class UserRegistration implements Serializable {
private Profile profile;
private Boolean someBooleanProperty;
public UserRegistration(Profile profile) {
this(profile, true);
}
public Profile getProfile() {
return profile;
}
public boolean isSomeBooleanProperty() {
return someBooleanProperty;
}
}
который, в свою очередь, использует другой сложный объект (профиль)
public class Profile {
private String nickname;
private String email;
private String password;
private String firstname;
private String lastname;
private Date birthDate;
private String phone;
private Address address;
private GenderType gender;
private String subscriptionSite;
private Date privacyAcceptanceDate;
private Date subscriptionDate;
private String activationCode;
private String socialSecurityNumber;
...
, который использует много сложных типов и т. Д.
Такое использование сложных типов меня действительно беспокоит.
Я либо не знаю, как это задокументировать (кроме составления длинного списка внутренних свойств этих сложных объектов), либо я просто потерян.
Мои вопросы:
Должен ли я упростить?
Эта архитектура очень плохо спроектирована?
Могут ли несколько строитель методы сделать свое дело?