假设我有两个models
:
class PhotoAlbum(models.Model):
name = models.CharField(max_length=255)
class Photo(models.Model):
album = models.ForeignKey(to=PhotoAlbum)
photo = models.ImageField(upload_to=".")
我希望给用户一个表格,他可以在表格中提供"名称"相册,我有一些逻辑,如何用给定名称的照片创建相册。我假设我需要在这里创建一些额外的服务:
class PhotoAlbumService:
def __init__(self, album):
self._album = album
self._photos = list(self._album.photo_set.all())
def create(self):
# creation logic here
# some common function for creation and updating
def update(self):
# updating logic here
# again the common function for creation and updating
# additional unique logic for updating
def _update_only_method(self):
# will be called only on update
def _common_logic(self):
# common logic both for create and update
并在我的views.py
我正在为创作做这样的事情:
AlbumService(Album(name="user_provided_name")).create()
并进行更新:
AlbumService(Album.objects.get(pk=1)).update()
但我很困惑,因为,例如,创作 - 我不需要有一个照片列表(创建前没有照片)和方法,只用于更新不需要创建。此外 - 在每次创建或更新时,都会创建新的服务实例。我对这种行为绝对不满意。也许有一些有用的模式可以规范这种行为?
UPD
为什么我没有使用过经理?据我所知 - 管理人员用于"表级"操作,但在这里我有几张桌子。此外,现有专辑的更新是"行级"操作,因此它应该作为模型方法存在。但我认为这个操作应该是耦合的