Задать вопрос
OMGcoder
@OMGcoder
Начинающий java программист

Как передать модель от сервера клиенту, если они разные у клиента и сервера?

Всем доброго времени суток!

Пишу мессенджер в качестве дипломной работы на Java EE.

На сервере есть модель ChatRoom
public class ChatRoom {

    private long id;
    private String name;
    private Map<String, Session> clients;
    private List<User> members;
    MessageEncoder encoder;
    OnlineUsersStorage onlineUsersStorage = OnlineUsersStorage.getInstance();

    public ChatRoom(long id, String name, List<User> members) {
        clients = new HashMap<>();
        encoder = new MessageEncoder();
        this.id = id;
        this.name = name;
        this.members = members;
    }

    //Setters
    public void setId(long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setMembers(List<User> members) {
        this.members = members;
    }

    public void setClients(Map<String, Session> clients) {
        this.clients = clients;
    }


    //Getters
    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public List<User> getMembers() {
        return members;
    }

    public Map<String, Session> getClients() {
        return clients;
    }


    //Methods
    public void sendMessage(Message message){

        try {
            String encodedMessage = encoder.encode(message);
            List<Session> sessions = onlineUsersStorage.getUserSession(members);
            for (Session s : sessions) s.getBasicRemote().sendText(encodedMessage);

        }catch (IOException | EncodeException e){
            e.printStackTrace();
        }

    }

}


И на клиенте есть тоже ChatRoom

public class ChatRoom {

    private long id;
    private String name;
    private List<User> members;
    private List<Message> messages;

    public ChatRoom(long id, String name, List<User> members, List<Message> messages) {
        this.id = id;
        this.name = name;
        this.members = members;
        this.messages = messages;
    }

    //Getters
    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public List<User> getMembers() {
        return members;
    }

    public List<Message> getMessages() {
        return messages;
    }

    //Setters
    public void setId(long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setMembers(List<User> members) {
        this.members = members;
    }

    public void setMessages(List<Message> messages) {
        this.messages = messages;
    }

    //Methods
    public Message getLastMessage(){
        return messages.isEmpty() ? null : messages.get(messages.size() - 1);
    }
}


Беда в том, что они имеют разную реализацию.

Клиенту ведь не нужно никаких полей типа
Map<String, Session> clients;
 MessageEncoder encoder;
OnlineUsersStorage onlineUsersStorage


А серверу не нужно иметь внутри ChatRoom
List<Message> messages;

Клиент в процессе работы программы шлёт запрос на сервер с просьбой предоставить ему ArrayList с объектами ChatRooms клиента.

Как на сервере можно реализовать это? Плодить два вида моделей ChatRoom аля ClientChatRoom/ServerChatRoom на сервере кажется глупым решением.
  • Вопрос задан
  • 125 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@Dmtm
Android
внутренние объекты сервера и клиента вообще никак не связаны, даже если полностью совпадают по полям
на клиента уходят специальные DTO объекты (data transfer), и это не то же самое что сущности из моделей клиента или сервера
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@nApoBo3
Использовать промежуточную модель. Из нее генерировать локальные объекты.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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