uxname
@uxname
Software Engineer

Android. Как совместить ORM модель и ООП модель?

Есть ООП модель классов, с которой работает приложение, например
class User {
String name;
String password;
}

И есть REST модель для Retrofit, которую приложение принимает при ответе сервера, например:
class User {
String responseStatus;
String name;
String password;
}

А так же есть структура для работы с БД (Sqlite) через ORMlite:
class User {
@DatabaseField (autoincrement = true) int id;
@DatabaseField String name;
@DatabaseField String password;
}

Все эти классы на 90% схожи друг с другом, но для разных библиотек нужны свои, дополнительные поля (например id поле для ORM). Подскажите bestpractices для такого случая, нужно ли объеденить все классы в один, со всеми полями
[
 int id (for ORM) ;
 String responseStatus (for REST) ;
 String name (for OOP) ;
 String password (for OOP) ;
]
?
Или лучше для каждой библиотеки выделять отдельный класс, и в случае изменения одного из них - вносить изменения вручную во все остальные?
  • Вопрос задан
  • 498 просмотров
Решения вопроса 1
@sirs
Лепить все в один класс не стоит. Классы, которые у вас используются для REST объявите как dto объекты, они должны синхронно меняться как на клиенте, так и на сервере. Для связи между тем, что в ресте и тем, что в бд - напишите простейшие конверторы на уровне сервиса.

UPD

Простейший пример:
dto класс :
class User {
String responseStatus;
String name;
String password;

public User(final String responseStatus, final String name, final String password){
this.responseStatus=responseStatus;
this.name = name;
this.password=password;
}

//setters
//getters
}


entity модель для orm:

class UserEntity {
@DatabaseField (autoincrement = true) int id;
@DatabaseField String name;
@DatabaseField String password;
//getters
//setters
}


есть у Вас простой сервис, который из контроллера передает данные в слой работы с базой, например

public class UserService(){

//some field

public void addUser(final User user){
//some code
UserEntity userEntity = convert(user);
//save userEntity into db
}

private UserEntity convert(final User user){
//some if 
//some logger
UserEntity userEntity = new UserEntity();
userEntity.setName(user.getName());
userEntity.setPassword(user.gerPassword());
return userEntity;
}
}


Это простейший пример, вариантов может быть много - различные мапперы, билдеры, конверторы и т.д. Это зависит от используемых фреймворков и принятого подхода на проекте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы