我有一些基本对象,如Customer,Portfolio和...与其他对象有一些关联。我可以通过读取对象值轻松地在网页中显示所需的信息。问题是,当与对象关联的值由方法计算并返回时,我该怎么办,这个值只在某个上下文中才有意义,并且不能作为实例变量附加到对象上?在这种情况下,如果我有一个说明用户列表,我必须将每个用户的用户名传递给方法以获取计算值。这会导致在显示页面中的值时保持关联的问题。
明确说明的一个例子:
应用程序为用户提供了一种功能,通过让用户将他们想要的任何人添加到列表中来跟踪彼此的活动。如果此用户对用户执行搜索,则可以选择跟踪每个返回的用户。我想确保对已经被关注的用户禁用此选项。此功能由isFollowed(String follower, String followee)
等返回布尔值的方法提供。如何将此布尔值与搜索结果中的每个用户相关联?
解决方案:
我能想到的一件事是向User类添加一个followed
实例变量。但我认为这不是一个好方法,因为这个变量只在某种情况下才有意义。它不是域中User类的一部分
我能想到的另一种方法是使用装饰或 Wrappers 来扩展User类并在子类中添加属性。但是,如果我有几个对象需要在同一个上下文中,那又怎么样呢。在这种情况下,我必须在所有类中使用相同的布尔属性扩展所有这些属性。
我希望我能说清楚。
答案 0 :(得分:1)
原则上,我认为User
:bool IsFollowedBy(User user)
上的实例方法没有任何问题。
当然,这可能会导致性能问题。如果是这种情况,您可以创建单独的对象用于演示目的,该对象捆绑来自User
的数据以及用户是否跟随执行搜索的用户。然后,您可以构建查询,在单个往返数据包中检索此对象的所有必要数据。
答案 1 :(得分:1)
一种解决方案是避免使用子查询/连接或甚至使用一些非规范化数据库来查询实体(如在DDD / ORM中)和查询。这是CQRS模式所暗示的。
其他解决方案是在应用程序层进行计算(无论如何,您可以在同一页面上显示多少用户),这很昂贵,但您可以实施一些缓存技术以使事情变得更容易。