我已经阅读了这里的几乎所有问题以及www中的许多相关论点,但我仍然不太清楚这一点,并且我可能会错过对其他人都很明显的事情,因为我认为是相当普遍的情况...
请原谅我糟糕的英语和混淆的术语,但我对DAO vs Repository的差异/优势/警告并不感兴趣,我认为这不会改变问题的“核心”,但也许我错了。
显然,这个例子太简单了,而且每个解决方案都容易过度使用,但我认为这是一个更大系统的“案例”。
假设您必须构建一个应用程序来建议销售人员致电。
每个潜在客户都有一些“文字”数据(即姓名,性别,出生日期,地址,电话号码,电子邮件......),照片以及他/她与其他人和供应商互动的历史记录。
文本数据驻留在Mysql表(人)上,照片位于文件系统中的某个位置,有人已经发布了一些服务,这些服务返回了一个潜在的有兴趣联系的人员列表,给出了销售员和每个潜在客户作为买家的分数。
我可能最终会得到以下结论:
域对象人员,包括姓名,电话号码,地址,电子邮件和照片。所有属性的塞特犬和吸气剂加上方法getScore()。
两个DAO,一个用于mysql表,一个用于文件系统。
获取给定销售员的潜在客户列表的服务(应用程序的用户,不在本示例的范围内)。
我不清楚:
域对象中的getScore()方法可以直接调用服务层中的服务吗?如果没有,为什么?
我是否需要单独的DTO来处理来自不同DAO的数据?
如果是这样,我需要某种管理器或“超级”DAO,它们拥有关于如何组装这两条信息的逻辑(即从mysql DAO获取URI,检索文件,加载图片) )?它应该驻留在数据层还是服务层? (似乎我应该留在数据层,只要它处理数据存储)。
经理或“超级DAO”的输出应该是另一个DTO还是可以直接作为域对象?
如果是DTO,我是否需要一个调用管理器/超级DAO的服务并构建域对象(在这种情况下,我假设该服务将“添加”到域对象的分数)。
我知道这是一个清晰的问题,但我无法弄清楚如何设计解决方案。
答案 0 :(得分:0)
答案的起点:
getScore()
方法应该属于不属于域对象的服务简而言之(在我看来)
允许从下到上使用,即。服务可以使用DAO而不是相反,以减轻更改的可能性(例如:数据库后端更改=> DAO更新及其更新)
=>社区维基