Как я могу разделить бизнес-логику между сервером и клиентом, если я использую RequestFactory?
Допустим, у меня есть бин Employee, у которого есть свойство dateOfBirth:
public class Employee {
...
private Date dateOfBirth;
...
public Date getDateOfBirth() {...}
public void setDateOfBirth(Date date) {...}
...
}
Чтобы использовать RequestFactory, я создаю EmployeeProxy:
@ProxyFor (value = Employee.class)
public inteface EmployeeProxy extends EntityProxy {
...
Date getDateOfBirth();
void setDateOfBirth(Date date);
...
}
Теперь предположим, что у меня есть статический метод, который дает Employee, он возвращает его возраст:
public class Util {
public static int getAge(Employee e) {
return (new Date()).getYear()-e.getDateOfBirth().getYear();
}
}
Если бы я не использовал RequestFactory и также имел класс Employee на клиенте, я мог бы разделить "Util" между сервером и клиентом и вызвать getAge() для экземпляров Employee на клиенте. Так как я использую RequestFactory, я полагаю, что мне нужно создать новую версию Util для клиента, например:
public class Util {
public static int getAge(EmployeeProxy e) {
return (new Date()).getYear()-e.getDateOfBirth().getYear();
}
}
Что может быть хорошим решением для создания версии Util как для клиента, так и для сервера?
Это тривиально, но на самом деле у меня есть некоторые сложные вычисления, которые я часто мог бы сделать на клиенте и сэкономить туда и обратно. Основная причина, по которой мне нравится RequestFactory, заключается в том, что он передает только измененные значения в обновлениях. Мои доменные классы - это простые POJO, которые я без проблем мог бы поделиться с клиентом.
1 ответ
В качестве лучшей практики - Ваш класс Employee должен реализовывать интерфейс EmployeeProxy.
Разве это не решит вашу проблему использования класса Util на стороне сервера тоже.