我遇到了重新解决问题,我没有找到任何好的例子或模式。
我有一个核心服务,可以执行所有繁重的数据库操作,并将结果发送到不同的前端(html,silverlight / flash,Web服务等)。 其中一个服务操作是“GetDocuments”,它提供基于不同过滤标准的文档列表。如果我只有一个前端,我想将结果打包到仅包含数据的Document DTO(数据传输对象)列表中。但是,不同的前端需要不同数量的“元数据”。简单客户端只需要文档标题和链接引用。其他客户想要文档的简短文本片段,另一个想要缩略图,第三个想要作者的名字。它基本上都取决于GUI的实现需要显示什么。
这是建模的最好方法:
还是有其他选择吗?
由于我需要高性能服务,因此我需要考虑网络负载和缓存策略。
有没有人有任何可能对我有帮助的好模式或做法?
答案 0 :(得分:0)
创建具有您的任何视图可能需要的所有数据并在任何地方使用它的DTO是否有任何显着的成本?我会这样做,特别是因为它使您免受需求变更的影响,让其中一个视图合并数据,其中一个视图使用
离。也许你的silverlight / flash视图没有显示标题本身b / c现在是拇指,但是他们决定以后再按它排序。
为了澄清,我并不认为你每次都需要传递所有数据,但我认为你的DTO类应该定义所有数据。只是不要陷入过早优化或分析瘫痪的陷阱。先做最简单的事,然后证明增加了复杂性。把它全部扔进去并描绘它。如果性能不可接受,请进行优化并重试。
答案 1 :(得分:0)
我要做的是让前端能够请求存在所需的元数据(比如getDocument(WITH_THUMBNAILS | WITH_TEXT_SNIPPET))
然后,此DTO仅使用此请求的信息构建。 正如您所说,添加所有可能的元数据是不可接受的。
我肯定会留下一个定义所有可能方法的类(getTitle(),getThumbnail()),如果可能的话,它会在未请求缩略图时返回占位符。像“图像不可用”之类的东西。
如果您想像模式一样对此进行建模,请查看工厂模式。
希望这会对你有所帮助。