我的处理程序设计好吗?
Is my handlers design fine?
所以我一直在用 netty 写一个服务器,我没有用它写任何其他东西,所以我想知道我的管道方法是否正确。
我在服务器和客户端中有 2 个默认处理程序,ObjectEncoder 和 Decoder,我想为我添加到服务器的每个功能创建一个新的处理程序,例如我有一个 UserAuthenticationHandler、UserActionHandler,它们中的每一个都处理不同的数据包和将它们传递给相应的 classes。
所以这是我想到的一种方法,另一种是针对每个功能的一个处理程序,这意味着我将不得不编写一个大开关来处理所有这些功能。
可以使用第一种方法还是应该继续使用第二种方法?
第一种方法示例
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;
}
}
第二种方法
想象一下第一个,但是每个 class.
都有 50 多个 switch case 和大得像地狱的构造函数
一般来说,如果有意义的话,我会建议使用不同的处理程序,因为这些处理程序将作用于不同的消息。从您的解释来看,这似乎并非如此。我认为在您的情况下,您应该只拥有解码器/编码器,然后是一个处理程序,它可以分派到应用程序的正确 "business logic" 界面。
所以我一直在用 netty 写一个服务器,我没有用它写任何其他东西,所以我想知道我的管道方法是否正确。
我在服务器和客户端中有 2 个默认处理程序,ObjectEncoder 和 Decoder,我想为我添加到服务器的每个功能创建一个新的处理程序,例如我有一个 UserAuthenticationHandler、UserActionHandler,它们中的每一个都处理不同的数据包和将它们传递给相应的 classes。
所以这是我想到的一种方法,另一种是针对每个功能的一个处理程序,这意味着我将不得不编写一个大开关来处理所有这些功能。
可以使用第一种方法还是应该继续使用第二种方法?
第一种方法示例
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;
}
}
第二种方法
想象一下第一个,但是每个 class.
都有 50 多个 switch case 和大得像地狱的构造函数一般来说,如果有意义的话,我会建议使用不同的处理程序,因为这些处理程序将作用于不同的消息。从您的解释来看,这似乎并非如此。我认为在您的情况下,您应该只拥有解码器/编码器,然后是一个处理程序,它可以分派到应用程序的正确 "business logic" 界面。