2009-07-23 69 views
0
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)) 

回答

6

真的这取决于你期望将来在两个类别之间是共同的。重构的目的是识别共同的抽象,而不是最小化代码行数。

这就是说,假设两个请求预计的区别仅在于模板:

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' 
1

重构为什么目的?你是否得到错误,想要做其他事情,或者...?假设正确的导入和URL调度围绕此,我没有看到任何必须重构的应用程序引擎 - 所以,不要让我们猜测!)

+0

有很多代码的重复,你看不出来?这是丑陋的,不太可读,并具有较差的维护性。为清晰起见, – 2009-07-24 01:14:39

+0

已删除“for AppEngine” – 2009-07-24 01:15:32

1

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

1

使它成为相同的类,并使用GET或POST参数来决定要呈现哪个模板。