2017-11-10 4 views
1

MVPアーキテクチャに関して質問がありますが、これは技術的な質問ではありません。MVPアーキテクチャでWebSocketチャットを行う場所

私はAndroidアプリでチャット(facebookのバックとセカンドのチャットのような)を実装する必要があります。私の質問は、これをMVPにどのように適合させるかです。

私はこれらの(簡体字)のクラスています

public class ChatFragment extends Fragment { 

    private final ChatFragmentPresenter presenter; 

    @Override 
    public void onResume() { 
     super.onResume(); 
     List<ChatMessage> chatHistory = repository.load(); //dont think fragment should actually interact with repository 
     displayChatHistory(chatHistory); 
    } 

    private void displayChatHistory(List<ChatMessage> chatHistory) { 
     //displays chat history.. 
    } 
} 

public class ChatFragmentPresenter { 

    private final ChatFragment fragment; 
} 

public class ChatClient { 
    public interface ChatClientCallback { 
     void onMessageReceived(); 
     void onMessageSentConfirmed(); 
    } 

    public void start(ChatClientCallback callback) { 
     //starts the chat.. 
    } 

    public void send(String message) { 
     //sends chat message.. 
     //if successfully sent then onMessageSentConfirmed() is called 
    } 
} 

public class ChatRepository { 

    public interface LoadChatCallback { 
     List<ChatMessage> onLoadChatSuccess(); 
     void onLoadChatFailed(); 
    } 

    public void load(GetChatCallback callback) { 
     // loads saved chat messages.. 
    } 

    public void save(ChatMessage message) { 
     //saves chat message.. 
    } 

    public void clear() { 
     //deletes all saved chat messages.. 
    } 
} 

public class ChatMessage { 

    public ChatMessage(String text, Type type) { 
     this.text = text; 
     this.type = type; 
    } 

    public final String text; 

    public final Type type; 

    public enum Type {FROM_OTHER, FROM_USER} 
} 

は、だから私の質問は以下のとおりです。ChatClient#start(callback)を呼び出してチャットを開始する予定です

ChatClientからメッセージを受信し、ChatClientにメッセージを送信するのは誰ですか?

受信したチャットメッセージをリポジトリに保存する責任は誰にありますか?

onResume()の間にチャット履歴をリポジトリから読み込む責任は誰にありますか?

プレゼンターはこれをすべて行う必要がありますか?私はセットアップとChatClientを閉じる/取得/すべての検索/保存を取り扱うデータ層のいくつかの種類があった場合好む、および使用可能な形でプレゼンターにだけデータを与えるだろうチャットを開始する予定です

答えて

0
  • ChatClient#start(コールバック)を呼び出すことによって? - アプリケーション/サービス/ syncadapter

  • チャットクライアントからメッセージを受信し、チャットクライアントにメッセージを送信するのは誰ですか? - application/service/syncadapterを使うことができます

  • 受信したチャットメッセージをリポジトリに保存するのは誰ですか?アプリケーションはそれをコンテンツプロバイダに送信できます(コンテンツプロバイダは安全なメカニズムを提供してsqliteにアクセスできます)

  • onResume()でリポジトリからチャット履歴を読み込むのは誰ですか?アクティビティ/フラグメント - >プレゼンター - >リポジトリ - >データプロバイダ

関連する問題