2017-12-11 42 views
-1

私はNettyを使ってサーバを書いてきました。私はパイプラインへの私のアプローチが正しいかどうか疑問に思っていました。

私は、サーバーとクライアント、ObjectEncoderとDecoderに2つのデフォルトのハンドラーを持っています。私は自分のサーバーに追加する各機能に対して新しいハンドラーを作成することを考えました。たとえば、UserAuthenticationHandlerとUserActionHandlerがあり、それらを対応するクラスに変換します。

これは私の心の中にあるアプローチの1つです。もう1つはすべての機能のハンドラです。つまり、すべての機能を処理する大きなスイッチを作成する必要があります。
最初のアプローチを使用しても構いませんか、それとも2番目のアプローチにとどまるべきですか?
私のハンドラはうまく設計されていますか?

例最初のアプローチの

public class UserAuthenticationHandler extends AbstractPacketHandler { 
    private User user; 

public UserAuthenticationHandler(User user, DatabaseConnection databaseConnection) { 
    this.user = user; 
    new UserAuthenticator(databaseConnection); 
} 

@Override 
protected void handlePacket(Packet packet) { 

    switch (packet.packetType){ 
     case "START_LOGIN": 
      UserAuthenticator.startLoginProcess(packet, user); 
    } 
} 

@Override 
public void channelActive(ChannelHandlerContext ctx) throws Exception { 
    super.channelActive(ctx); 
} 

public User getUser(){ 
    return user; 
} 

}

第二のアプローチ

だけでなく、50+スイッチケースで、すべてのクラスのために地獄のコンストラクタとして大きな最初のものを想像してみてください。

+1

これまでに試したことのコードサンプルをご提供ください。そうすれば、私たちはより効果的にあなたを助けることができます。 – Ivonet

+0

@ivonet私の現在のアプローチを追加しました。 – Bleo

答えて

1

一般的に、これらは異なるメッセージで動作するため、異なるハンドラを使用することをお勧めします。あなたが説明したことから、これはそうではないように思えます。私はあなたの場合、デコーダ/エンコーダとアプリケーションの正しい "ビジネスロジック"インターフェースにディスパッチするハンドラを1つだけ持っているべきだと思います。

関連する問題