我将自己沉浸在DDD中,并对有关什么属于该域以及对基础架构有什么疑问。
描述域的简化示例:
该应用程序中的一种上下文是关于便利功能,该功能允许用户检查网页中的某些信息。即
“用户希望检查网页并确定短语“ lorem ipsum”是否出现以及出现在什么位置。”
我们将使用Selenium作为匹配短语的基础技术。
在深入研究DDD之前,我将创建一个如下所示的类(以下为Python,但语言无关紧要):
class Page:
def __init__(self, url, environment, driver):
self.environment = environment
self.url = url
self.driver = driver // Selenium Driver
def contains_phrase(self, phrase):
self.driver.get(self.environment.url + self.url_suffix) // Selenium Command
...
现在,该实体依赖于硒,不再是纯对象(POCO,POJO等)。在DDD中,这对我来说并不正确。
我的理解是,硒表达也不属于应用程序服务层,因为这会使类/方法膨胀,并且服务层在理想情况下应该是瘦的。
那么这是否属于基础架构层?就像一个存储库,其中存在持久性代码。就像是:
class PageAutomator:
...
def does_page_contain_phrase(self, page, phrase):
self.driver.get(self.environment.url + self.url_suffix) // Selenium Command
这听起来像是正确的方向吗?如果是这样?:
这意味着Page实体开始趋向于贫血模型,并且正在成为简单的DTO。如果是这样,这个实体是否还必要?
应用程序服务层直接调用基础结构层并执行某些操作(执行用例),而根本不涉及任何实体(并因此涉及域),是否可以接受?即使采用更多的事务脚本方法,我的理解是Selenium功能仍然不应该存在于域中吗?
或者(而且我是DDD的新手)我已经完全脱离基础了,在这种情况下,任何建议都非常受欢迎。
谢谢
最佳答案
在HTML内搜索字符串不是业务逻辑,因此域驱动的设计不应在此处应用。
在这里,DTO或没有行为表示该页面的类是有意义的。
如果需要针对特定于Selenium的实现或跨应用程序的可重用性进行抽象,则“搜索服务”将是基础架构问题。如果不需要它,那将是一个特定于应用程序的服务/实用程序。
关于python - 域驱动设计(DDD):域或基础结构问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48424764/