的字符串解析器coresponds到特定域应当被认为是一个实用程序或结构域/值对象?设计特定特征在DDD
实施例:用户提交的金融工具的搜索请求。例如“OMX KR股票”。为了将这种字符串提交给提供者,必须对其进行解析并将其映射到其确切值(工具名称,市场代码,工具类型)。搜索请求文件结构取决于仪器类型,因此在解析字符串后,必须根据数据库中的现有类型检查仪器类型。如果不存在,则不能提交搜索请求,并且用户必须相应地收到响应。
(与您预期的有点不同,用户提交搜索请求,应用程序通过生成请求文件通过FTP向外部提供者提交搜索请求,经过一段时间请求得到满足并从并且保存到数据库中,所以没有立即回应搜索请求。)
我无法找到合适的位置来放置此逻辑。通常它可能是SearchRequest实体内的值对象,但是需要根据数据库进行验证会引发问题。
而且我试图避免引入静态的解决方案,因为我怀疑它使测试更加困难。尤其是如果它被认为是域的逻辑,我不认为它应该属于一个静态方法作为一种实用工具,辅助性或者等
什么会根据DDD解决这个问题的正确方式?
搜索通常不会修改域模型,那么为什么您需要验证仪器类型? “验证”是一种奇怪的方式来拼写“如果不支持此工具,请执行其他操作”。 – VoiceOfUnreason
用更多的信息更新了这个问题 – DasBoot
搜索查询格式是所有搜索提供者的一个约束(假设会有更多的)或者它是特定于当前提供者的吗?我可能有一个接口,比如'ISearchProvider {List validateQuery(String searchQuery),...}'并在基础结构中实现它。可以在域或应用程序服务层中定义“ISearchProvider”和“SearchQueryError”(不确定哪里最好)。 –
plalx