【问题标题】:Seeking advice: overview/detail representation of models寻求建议:模型的概述/详细表示
【发布时间】:2014-08-26 19:24:28
【问题描述】:

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

情况

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

我经常处理聚合使用但需要有效读取和传输的大型模型。假设我有以下模型:

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

问题

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

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

解决方案

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

  • 对于用户:简化模型只有名字/姓氏和电子邮件。
  • 对于图像:简化模型没有图像数据。
  • 文章作者为用户简化版,用户头像为图片简化版。

问题

  • 这是一种现有的模式吗?它有点与 DTO(数据传输对象)有关,但又不一样。有人见过这个吗?
  • 你以前用过类似的东西吗?关于命名、两种表示之间的 OO 关系有什么建议或技巧吗?

【问题讨论】:

    标签: java architecture modeling 3-tier


    【解决方案1】:

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

    它有两个部分,

    总而言之,这为您提供了一个非常灵活的 API,在您的 API 下具有非常干净的域模型。现在这是一种被广泛接受的方法。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多