"One-time use methods" - 看起来更好,但更难阅读?
"One-time use methods" - looks better, but harder to read?
对于一个非常复杂的对象,我有一个构造函数需要做很多设置。
此设置的很多内容包括向其中的其他对象添加侦听器,因此我的构造函数充满了样板匿名内部 class 方法描述。由于您需要全部实现它们,即使您不想使用它们,它们最终也会占用大量 space。示例:
myTag.addMouseListener(new MouseListener()
{
public void mouseUp(MouseEvent e)
{
// do nothing
}
public void mouseDown(MouseEvent e)
{
myTag.setListVisible(true);
}
public void mouseDoubleClick(MouseEvent e)
{
// do nothing
}
});
一堆废话(是的,我知道格式也很丑,但这是我们团队的风格,没有必要争论)。
我通过为这些一次性操作创建方法来解决这种丑陋问题,例如
addEventListeners()
诸如此类。但我觉得这些违背了方法应该是什么:模块化和可重用的代码,您可以制作通用的代码。相反,我得到了这些特定的一次性方法,这些方法只存在于我不想让它们的主体内联。
你是如何处理这种情况的?我知道在这种情况下所有样板文件都是必要的邪恶,但我是将它们全部放在我的构造函数中,这是唯一需要它的地方,还是将它分解成方法,这些方法只使用一次且仅一次存在隐藏难看的代码段?
编辑:需要说明的是,我的示例只是大量样板代码的一个症状。我现在肯定在使用适配器(感谢您的建议!)但我的问题最终是关于将一些代码从一个又长又忙的构造函数分解成零碎的代码是否有意义,即使它们只使用一次并且没有服务模块化目的,而不是将代码移出大构造函数以使其更具可读性。
你可以试着把这些东西想象成服务。只使用您需要的服务。 en.wikipedia.org/wiki/Service_layers_pattern
您可以在此处使用多种设计模式来提高其可用性。
Observer Design Pattern 是一个好的开始。
在这个问题中,这也是一个很好的方法:
Design pattern for mouse interaction
为了避免此类问题,Swing 引入了 Adapters,它们是侦听器的空实现。所以而不是
myTag.addMouseListener(new MouseListener()
{
public void mouseUp(MouseEvent e)
{
// do nothing
}
public void mouseDown(MouseEvent e)
{
myTag.setListVisible(true);
}
public void mouseDoubleClick(MouseEvent e)
{
// do nothing
}
});
你可以简单地使用
myTag.addMouseListener(new MouseAdapter()
{
//override only method you need
public void mouseDown(MouseEvent e)
{
myTag.setListVisible(true);
}
});
BTW 适配器可以实现许多类似的接口,例如 MouseAdapter
它是 MouseListener
、MouseWheelListener
和 MouseMotionListener
的空实现
如果你想知道是一个长方法还是几个短方法更好,即使它们只在一个地方使用,我也会选择很少的短方法,因为这样会更容易使用正确命名的方法阅读您的代码。另外(对很多人来说非常重要的一点)更小的方法更容易测试。
对于一个非常复杂的对象,我有一个构造函数需要做很多设置。
此设置的很多内容包括向其中的其他对象添加侦听器,因此我的构造函数充满了样板匿名内部 class 方法描述。由于您需要全部实现它们,即使您不想使用它们,它们最终也会占用大量 space。示例:
myTag.addMouseListener(new MouseListener()
{
public void mouseUp(MouseEvent e)
{
// do nothing
}
public void mouseDown(MouseEvent e)
{
myTag.setListVisible(true);
}
public void mouseDoubleClick(MouseEvent e)
{
// do nothing
}
});
一堆废话(是的,我知道格式也很丑,但这是我们团队的风格,没有必要争论)。
我通过为这些一次性操作创建方法来解决这种丑陋问题,例如
addEventListeners()
诸如此类。但我觉得这些违背了方法应该是什么:模块化和可重用的代码,您可以制作通用的代码。相反,我得到了这些特定的一次性方法,这些方法只存在于我不想让它们的主体内联。
你是如何处理这种情况的?我知道在这种情况下所有样板文件都是必要的邪恶,但我是将它们全部放在我的构造函数中,这是唯一需要它的地方,还是将它分解成方法,这些方法只使用一次且仅一次存在隐藏难看的代码段?
编辑:需要说明的是,我的示例只是大量样板代码的一个症状。我现在肯定在使用适配器(感谢您的建议!)但我的问题最终是关于将一些代码从一个又长又忙的构造函数分解成零碎的代码是否有意义,即使它们只使用一次并且没有服务模块化目的,而不是将代码移出大构造函数以使其更具可读性。
你可以试着把这些东西想象成服务。只使用您需要的服务。 en.wikipedia.org/wiki/Service_layers_pattern
您可以在此处使用多种设计模式来提高其可用性。
Observer Design Pattern 是一个好的开始。
在这个问题中,这也是一个很好的方法: Design pattern for mouse interaction
为了避免此类问题,Swing 引入了 Adapters,它们是侦听器的空实现。所以而不是
myTag.addMouseListener(new MouseListener()
{
public void mouseUp(MouseEvent e)
{
// do nothing
}
public void mouseDown(MouseEvent e)
{
myTag.setListVisible(true);
}
public void mouseDoubleClick(MouseEvent e)
{
// do nothing
}
});
你可以简单地使用
myTag.addMouseListener(new MouseAdapter()
{
//override only method you need
public void mouseDown(MouseEvent e)
{
myTag.setListVisible(true);
}
});
BTW 适配器可以实现许多类似的接口,例如 MouseAdapter
它是 MouseListener
、MouseWheelListener
和 MouseMotionListener
如果你想知道是一个长方法还是几个短方法更好,即使它们只在一个地方使用,我也会选择很少的短方法,因为这样会更容易使用正确命名的方法阅读您的代码。另外(对很多人来说非常重要的一点)更小的方法更容易测试。