寻求建议:模型的概述/细节表示

时间:2014-07-05 23:50:34

标签: java architecture modeling 3-tier

我有一个困扰我很长一段时间的问题,我也想出了一个解决方案,这里的问题是如何最好地实现它,所以我正在寻求如果您以前曾经处理过这种情况,那么您的建议(在网络上很难找到对此主题有用的内容)。

情况

3层架构(富客户端,如Swing或Eclipse RCP或Android,带有服务层实现的Web应用程序,关系数据库)。 我的模型是 POJOs (普通的旧Java对象,带有getter和setter的纯数据容器),它们是持久的(我所有模型上的技术ID)。

我经常处理聚合使用的大型模型,但需要高效地读取和传输。让我们说我有以下模特:

  • 用户,包含登录名,密码哈希,盐,名/姓,电子邮件地址,授权凭据,个人资料图片(图片)
  • 图片,包含姓名,内容类型和(通常较大的)数据
  • 文章,包含文字,作者(用户)

问题

现在,当我列出或加载文章时,我不想加载整个作者(用户),因为它暴露了太多细节(密码哈希和盐)并且携带了太多数据(凭证,图片)我在文章的上下文中实际需要的内容(姓/名和电子邮件)。

一般来说:有时我需要我的模型的全部细节(在创建/编辑它们时,或在非常特定的情况下),但当我在其他模型中聚合使用时,我会' d而不是简化形式(如果我需要详细信息,我可以使用单独的请求加载它们。)

解决方案

对于每个型号,我可以创建两个变种:一个带有完整CRUD的完整详细信息变体(创建,读取,更新,删除)以及简化,只读变体,可用作聚合关系中的代理。简化模型版本还包含详细版本的技术ID,因此我可以按需提取。

  • 对于用户:简化模型只有姓/名和电子邮件。
  • 对于图像:简化模型没有图像数据。
  • 文章的作者是用户的简化版本,用户的个人资料图片是图片的简化版本。

问题

  • 这是一个现有模式吗?它有点与DTO(数据传输对象)有关,但它不一样。有没有人见过这个?
  • 您之前使用过类似的内容吗?有关两种表示之间命名,OO关系的建议或提示吗?

1 个答案:

答案 0 :(得分:1)

我无法将您的解决方案选项与我所知道的模式相关联。但是,您的要求可以通过稍后在您的服务之上引入非常薄的API(Web API)来实现。

它有两个部分,

总而言之,这给你带来的是一个非常灵活的API,在你的API下有一个非常干净的域模型。这是目前广泛接受的方法。

希望有所帮助。