上下文感知表示的设计模式

4

问题

是否存在一种设计模式,可以创建上下文敏感的类表示形式?

定义

表示形式:可用的getter和它们返回的值。

上下文:对象的请求上下文。

示例

一个网站发布出售房屋信息。

一个未注册用户有 House.getPrice() ,返回房屋X的价格100,000。

一个注册用户有 House.getPrice() ,返回房屋X的价格为95,000。

一个注册用户有 House.getLandLordEmail(),未注册用户则没有该方法。

目的

这个实际用途是REST服务,使用JAX-B自动映射到XML/JSON。

注意

我并不是要求编写代码来实现这个。我只想知道是否有一种设计模式,以及它叫什么名字。

3个回答

4

是的,我认为装饰器在这里是一个不错的方法。结合一个用于生成具体类型的工厂,您可以很好地分离关注点。 - Sam Holder
1
我不理解策略模式的应用,但我同意装饰器看起来非常有前途(实际上很像我已经想到的)。 - wvdz
可以根据不同的定价模型应用策略来进行价格计算。 - Alex Fitzpatrick

2
为什么不能有一个类似于HouseFactory的工厂来生产实现了IHouse接口的对象?然后你可以有像RegisteredUserHouseGuestUserHouse这样的实现,它们封装了你所描述的逻辑。然后根据用户是否注册,只需从工厂中选择要返回的实现即可。请注意保留HTML标签。

1
非常实用且易于实现。 - Jose Martinez
我觉得房屋销售领域模型(这是一个真实世界概念的模型)与用户注册状态(这是互联网营销的概念)之间的耦合度太高了,你在RegisteredUserHouseGuestUserHouse类中混合了两个不相关的领域概念,这似乎有些奇怪。 - Forketyfork
@SergeyPetunin,我只是在提出一种方法,并且举了一个可能实现的例子。类的名称仅为示例,可能不太现实。对于已注册的用户,他们购买房屋可以获得折扣,这对我来说似乎很奇怪。要省5000元购买房屋,我会加入一个网站。也许这可以成为其他项目的模型。 - Sam Holder

0

我认为你试图解决两个不同的任务。

当您需要根据用户是否注册仅显示房屋的部分信息时,应在表示层中执行此操作(在生成界面并应用安全约束时),而不是将其拖入域层。

当您需要根据用户是否注册应用某种价格或折扣策略时,这似乎是一个域层问题,并且应使用策略模式来解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接