我将自己沉浸在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
    ...


现在,该实体依赖于硒,不再是纯对象(PO​​CO,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/

10-13 00:05