2009-07-23 118 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參數來決定要呈現哪個模板。