Tôi đang viết rất nhiều nhiệm vụ rất giống nhau và muốn biết cách phân lớp Task
tốt hơn để giảm bớt bản mẫu. Vì một nhiệm vụ chỉ được instatiated một lần, tôi bạn không thể đặt những thứ trong __init__
như tôi hiển thị dưới đây, nhưng nó nên minh họa điểm.phân lớp cần tây Nhiệm vụ
những gì tôi đang cố gắng để hoàn thành:
class EmailTaskOne(Task):
def run(self, object_id):
email_data = EmailData.objects.get(pk=object_id)
data = self.do_common_stuff(email_data)
self.do_unique_stuff(data)
class EmailTaskTwo(Task):
def run(self, object_id):
email_data = EmailData.objects.get(pk=object_id)
data = self.do_common_stuff(email_data)
self.do_unique_stuff2(data)
# lots more tasks like this
Những gì tôi muốn làm là:
class BaseEmailTask(Task):
abstract = True
#...Insert Magic Here...
class EmailTaskOne(BaseEmailTask):
def run(self, object_id):
self.do_unique_stuff(self.data)
Vì vậy, kể từ __init__
là đúng ra, nơi nào tôi thiết lập các lớp trong lớp trừu tượng. Tôi có thể định nghĩa một loạt các hàm khá dễ dàng nếu tất cả những gì tôi muốn làm là tính ra một số thứ, nhưng một số (rất nhiều) của boilerplate phụ thuộc vào object_id.
thể trùng lặp của [nhiệm vụ cần tây và tùy chỉnh trang trí] (http://stackoverflow.com/questions/6393879/celery-task- và tùy chỉnh-trang trí) – Louis
Trong khi giải pháp có thể áp dụng - câu hỏi được đặt ra là khác nhau. Như vậy, tôi không nghĩ rằng nó là một bản sao. Nếu tôi đã cố gắng để tăng DRYness của nhiệm vụ của tôi bằng cách sử dụng mixins và sublcassing nhiệm vụ - Tôi sẽ không được tìm 'tùy chỉnh trang trí', nhưng 'subclass' hoặc 'mixin' hoặc một cái gì đó như thế. – yarbelk