代码之家  ›  专栏  ›  技术社区  ›  Jader Dias

如何重构这个python代码?

  •  0
  • Jader Dias  · 技术社区  · 15 年前
    class MainPage(webapp.RequestHandler):
      def get(self):
        user = users.get_current_user()
        tasks_query = Task.all()
        tasks = tasks_query.fetch(1000)
        if user:
          url = users.create_logout_url(self.request.uri)
        else:
          url = users.create_login_url(self.request.uri)
        template_values = {
          'tasks': tasks,
          'url': url
          }
        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))
    
    class Gadget(webapp.RequestHandler):
      def get(self):
        user = users.get_current_user()
        tasks_query = Task.all()
        tasks = tasks_query.fetch(1000)
        if user:
          url = users.create_logout_url(self.request.uri)
        else:
          url = users.create_login_url(self.request.uri)
        template_values = {
          'tasks': tasks,
          'url': url
          }
        path = os.path.join(os.path.dirname(__file__), 'gadget.xml')
        self.response.out.write(template.render(path, template_values))
    
    4 回复  |  直到 15 年前
        1
  •  6
  •   Jader Dias    15 年前

    实际上,这取决于您期望将来两个类之间的共同点。重构的目的是识别常见的抽象,而不是最小化代码行的数量。

    也就是说,假设两个请求只在模板中有所不同:

    class TaskListPage(webapp.RequestHandler):
        def get(self):
            user = users.get_current_user()
            tasks_query = Task.all()
            tasks = tasks_query.fetch(1000)
            if user:
              url = users.create_logout_url(self.request.uri)
            else:
              url = users.create_login_url(self.request.uri)
            template_values = {
              'tasks': tasks,
              'url': url
              }
            path = os.path.join(os.path.dirname(__file__), self.template_name())
            self.response.out.write(template.render(path, template_values))
    
    class MainPage(TaskListPage):
        def template_name(self):
            return 'index.html'
    
    class Gadget(TaskListPage):
        def template_name(self):
            return 'gadget.xml'
    
        2
  •  1
  •   Alex Martelli    15 年前

    重构的目的是什么?你是在犯错,想做点别的,还是…?假设正确的导入和URL分配围绕着这个问题进行,我在这里看不到任何需要为应用引擎重构的内容——所以,不要让我们一直猜测!-)

        3
  •  1
  •   Jake    15 年前

    由于两个类都是相同的,除了一个字符串(“index.html”vs“gadget.xml”),是否可以将其中一个作为另一个的子类,并将其中一个字符串作为两个类中的类常量?

        4
  •  1
  •   EmilyS    15 年前

    使其成为同一类,并使用get或post参数来决定要呈现哪个模板。