我注意到Python Web Frameworks交易请求交易:装饰符,带有单个请求的方法的控制器类,以及使用方法/发布方法的请求类。

我对这三种方法的美德感到好奇。这些方法中的任何一种有主要优势或缺点吗?要解决想法,这里有三个示例。

瓶子 使用装饰器:

@route('/')
def index():
    return 'Hello World!'

使用控制器类:

class HelloController(BaseController):
    def index(self):
        return 'Hello World'

龙卷风 使用请求处理程序类和类型的方法:

 class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

哪种风格是最佳实践?

有帮助吗?

解决方案

实际上,您列出的三种方法中的每一种都有一个原因,每个项目都有特定于每个项目的原因。

  • 瓶子试图使程序员尽可能简单/直接。使用装饰器的路线,您不必担心开发人员理解OOP。
  • 塔楼开发目标是使代码重新使用,并轻松地与WSGI风格的HTTP流程路由集成。因此,他们选择了一种非常OOP的组织路线方式。例如,您可以将Hellocontroller复制到任何塔式应用程序中,并且它应该神奇地工作。即使该应用程序正在以某种复杂的方式通过WSGI提供。
  • 龙卷风还有另一个理由按照自己的方式进行操作:龙卷风的基于epoll的iOloop(与tornado.web.application结合使用)启用了每个请求时的每个requestHandler,请随着请求的进来。通过将每个请求handler限制为特定的get或张贴ioloop允许IOLOOP,这允许IOLOOP允许IOLOOP要快速实例化课程,处理请求,最后让它收集垃圾。无论您的应用程序有多少个请求者,这都可以使其迅速而高效地效率保持较小的内存足迹。这也是龙卷风比其他基于Python的Web服务器更多的同时请求的原因(每个请求都有自己的实例)。

现在,说了所有事情,您应该知道,您可以随时覆盖默认框架行为。例如,我写了 MethodDisPatcher 对于龙卷风而言,它使它更像塔架(好吧,我写的时候我想到了樱桃)。它减慢了龙卷风的减慢量(并略微增加内存足迹),因为有一个大的请求者(与很多小的请求),但它可以减少应用程序中的代码量,并使阅读更易于阅读。 (当然,我有偏见的意见=)。

其他提示

各种框架试图通过最佳代码(用于写作和阅读)实现最佳性能。他们每个人都根据MVC或MVT采用不同的策略。

您关注的是个人品味。我的回答也是如此。我正在努力避免任何形式的圣战,因为我可能不知道有效的技术论点。

但是我 亲自 希望将路由与控制器分开(Django的视图),并与该路由分开。它使重复使用控制器非常简单。是的,我是Django用户。

因此,我真的不是瓶装装饰者的忠实拥护者,也不是在巨大的大型班上包装的东西。我曾经是ASP.NET DEV的时候,但Django让我免费。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top