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