[英]Where should reside the logic to assemble the domain object from DAO?
我在这里阅读了几乎所有问题,并在www上阅读了许多相关的论据,但我仍然不确定是否要理解这一点,并且可能我错过了其他人显而易见的内容,因为我认为这很普遍情况...
拜托,请原谅我糟糕的英语和混乱的术语,但是我对DAO与存储库的差异/优势/不足并不真正感兴趣,我认为这不会改变问题的“核心”,但也许我错了。
显然,该示例太简单了,每个解决方案都容易过大,但请以这为更大系统的“案例”。
假设您必须构建一个应用程序来建议推销员与他们联系。
每位准客户都有一些“文本”数据(即姓名,性别,生日,地址,电话号码,电子邮件等),一张照片以及他/她与其他人和卖方互动的一些历史记录。
文本数据驻留在Mysql表(人)上,文件系统中某处的照片上,有人已经发布了服务,这些服务返回给销售员的潜在潜在联系人列表,并给出每个潜在买家的得分。
我可能会得到以下结果:
域对象人,带有名称,电话号码,地址,电子邮件和照片。 所有属性的设置器和获取器,以及方法getScore()。
两个DAO,一个用于mysql表,另一个用于文件系统。
用于获取给定业务员(应用程序的用户,不在此示例范围内)的潜在客户列表的服务。
我不清楚的是:
域对象中的getScore()方法可以直接在服务层中调用服务吗? 如果没有,为什么?
对于来自不同DAO的数据,我是否需要单独的DTO?
如果是这样,我需要某种管理器或“超级” DAO,它们具有有关如何组合这两条信息的逻辑(即从mysql DAO获取URI,检索文件,加载图片)? 它应该驻留在数据层还是服务层? (在我看来,就应该存储数据而言,它应该保留在数据层中)。
管理器或“超级DAO”的输出应该是另一个DTO,还是可以直接是域对象?
如果是DTO,我是否需要一个服务来调用经理/超级DAO并建立域对象(在这种情况下,我认为该服务会将分数“添加”到域对象)?
我知道这是一个明确的问题,但是我无法弄清楚如何设计解决方案。
答案的起点:
getScore()
方法应该属于服务而不属于域对象 简而言之(我认为)
允许从下到上使用,即。 服务可以使用DAO,但不能使用其他方法来减轻更改的可能性(例如:数据库后端更改=> DAO已更新,仅此而已)
=>社区Wiki
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.