从域模型中解耦昂贵的 I/O 操作
Decoupling expensive I/O operations from domain model
假设我的业务逻辑 User
具有用户名、地址 phone 和个人资料照片:
class User:
def __init__(
self, username: str, address: str, phone: str, profile_picture: np.ndarray
):
self.username = username
self.address = address
self.phone = phone
self.profile_picture = profile_picture
def foo(self):
...
def bar(self):
...
def flip_profile_picture(self):
self.profile_picture = np.fliplr(self.profile_picture)
我的User
class的大部分操作不需要访问profile_picture
属性,而且每次我需要操作时加载个人资料图片是相当昂贵的在 User
个实例上。
从用户那里抽象出个人资料图片的正确方法是什么?我想到的方法是创建一个实体 ProfilePicture
来保存 username
和数组数据。这意味着为 ProfilePicture
class 创建一个存储库,假设用户想要翻转他的个人资料图片,则必须有一个接收用户的服务,即:
class ProfilePictureService:
def __init__(self, profile_picture_repository: ProfilePictureRepository):
self.profile_picture_repository = profile_picture_repository
def flip_profile_picture(self, user: User):
profile_picture = self.profile_picture_repository.get(user.username)
profile_picture.flip()
self.profile_picture_repository.update(profile_picture)
还有其他方法吗?总的来说,只有在真正需要它们时才避免对实体的某些属性进行昂贵的 I/O 操作的最佳方法是什么。
如果 DDD 术语不准确,请原谅,如果需要,我可以澄清任何事情。
Are there any other ways to do this? In general what is the best way to avoid expensive I/O operations on certain attributes from an entity only until they are actually needed.
对于 个人资料图片 之类的东西,您可能需要考虑为什么您的域模型会关心该数据(您是否为蓝色背景的会员提供特别折扣) ?如果域模型不需要它,则根本不要加载图片——将其从聚合中取出,将其存储在不同的数据库中。
但是如果您确实拥有模型需要的昂贵数据,但仅用于某些操作,通常的答案是创建分配给不同聚合的单独实体。
这通常意味着与同一用户相关的一堆信息分散在多个实体和集合中
假设我的业务逻辑 User
具有用户名、地址 phone 和个人资料照片:
class User:
def __init__(
self, username: str, address: str, phone: str, profile_picture: np.ndarray
):
self.username = username
self.address = address
self.phone = phone
self.profile_picture = profile_picture
def foo(self):
...
def bar(self):
...
def flip_profile_picture(self):
self.profile_picture = np.fliplr(self.profile_picture)
我的User
class的大部分操作不需要访问profile_picture
属性,而且每次我需要操作时加载个人资料图片是相当昂贵的在 User
个实例上。
从用户那里抽象出个人资料图片的正确方法是什么?我想到的方法是创建一个实体 ProfilePicture
来保存 username
和数组数据。这意味着为 ProfilePicture
class 创建一个存储库,假设用户想要翻转他的个人资料图片,则必须有一个接收用户的服务,即:
class ProfilePictureService:
def __init__(self, profile_picture_repository: ProfilePictureRepository):
self.profile_picture_repository = profile_picture_repository
def flip_profile_picture(self, user: User):
profile_picture = self.profile_picture_repository.get(user.username)
profile_picture.flip()
self.profile_picture_repository.update(profile_picture)
还有其他方法吗?总的来说,只有在真正需要它们时才避免对实体的某些属性进行昂贵的 I/O 操作的最佳方法是什么。
如果 DDD 术语不准确,请原谅,如果需要,我可以澄清任何事情。
Are there any other ways to do this? In general what is the best way to avoid expensive I/O operations on certain attributes from an entity only until they are actually needed.
对于 个人资料图片 之类的东西,您可能需要考虑为什么您的域模型会关心该数据(您是否为蓝色背景的会员提供特别折扣) ?如果域模型不需要它,则根本不要加载图片——将其从聚合中取出,将其存储在不同的数据库中。
但是如果您确实拥有模型需要的昂贵数据,但仅用于某些操作,通常的答案是创建分配给不同聚合的单独实体。
这通常意味着与同一用户相关的一堆信息分散在多个实体和集合中