重构代码@staticmethod设计

时间:2016-07-01 11:00:42

标签: python tornado

我有龙卷风应用,以前有以下结构:

class handler(tornado.websocket.WebSocketHandler):
   @tornado.gen.coroutine
   def do_something(self,m):
      # do something

  def on_message(self,msg):
     tornado.ioloop.IOLoop.current().spawn_callback(self.do_something,m)

不幸的是,随着我的应用程序规模的扩大,这种方法变得过于繁琐。我需要拆分辅助方法E.g.来自处理程序类的do_something()。我想到的解决方案是创建另一个类:

class SessionMsgHandlers(object):

   @staticmethod
   @tornado.gen.coroutine
   def do_something(ws,m):
      # do stuff

然后调用此函数:

tornado.ioloop.IOLoop.current().spawn_callback(SessionMsgHandlers.do_something,self,m)

这将允许我将我的函数分组到WebSocketHandler类之外,但这意味着我的几乎所有函数都将是静态的。让它们与类相关联的唯一真正好处是我可以将不同的处理函数组合在一起。从设计的角度来看,最好只有一个带有函数的标准模块,而不是将它们与具有静态方法的特定类(永远不会有实例)相关联?将这些作为静态方法而不是正常函数还有很多性能损失吗?

1 个答案:

答案 0 :(得分:1)

如果您需要提取方法以便按常用功能对它们进行分组,那么最好将您的类放入mixin:

class SessionMsgMixin(object):

    @tornado.gen.coroutine
    def do_something(ws,m):
       # do stuff


class MyHandler(tornado.websocket.WebSocketHandler, SessionMsgMixin):

    def on_message(self,msg):
        tornado.ioloop.IOLoop.current().spawn_callback(self.do_something,m)