我正在使用MVC框架创建一个web应用程序。我想在控制器和域模型之间添加一层,我认为它在DDD中被称为应用层,以避免在域模型中放入特定于特定用例的逻辑。控制器将仅与该层交互,并且该层将使用域模型来编排操作。这个层将保持尽可能薄,推动所有不是特定于领域模型的用例的逻辑。我将调用属于该层的类DomainCtrl。
登录场景示例:型号:LoginFormDomainCtrl:AuthCtrlUI:UI控制器
1.ui控制器收到请求2.创建AuthCtrl实例3.AuthCtrl创建LoginForm的实例,并用传递给AuthCtrl的请求数据填充该实例4.LoginForm执行登录5.authCtrl执行特定于这种特定登录方式的其他操作->向ui控制器返回错误
这是组织应用程序的好方法吗?
您的问题
这是构建应用的好方法吗
这是一个非常复杂的问题。简单的答案是是,但更正确的答案是
让我们从简单的答案开始。让主应用程序不知道UI通常是个好主意。这意味着您可以从不同的地方轻松地使用您的应用程序。在DDD中,这个外层通常被称为应用层。它主要负责协调你的域、持久性和其他你可能依赖的资源之间的交互。这也允许你让你的域处于中心,而不知道其他一切。如果实现良好,这将使您的域易于测试和维护。
现在,答案的"取决于"部分。DDD并不是构建应用程序的唯一成功方法,在某些情况下,它可能比其他任何方法都更为困难。你必须问问自己我的应用程序在做什么。是否有许多特定于域的规则?我是否只获取和存储基本数据等?这些都是您在选择体系结构和技术之前需要回答的问题。
我仍然想说,选择DDD方法可能不会出错,因为它通常是一种很好的做事方式。
*注意:我不太清楚您的示例,但您应该小心将UI概念泄露到您的域/应用程序中。在某种程度上,登录表单和身份验证完全是一个UI概念。您可能会让应用程序返回用户的详细信息,但UI层应该决定是否允许用户继续。
在高级视图中,是
但它最终取决于你如何在逻辑上分离你的层。在您的场景中,我看不到任何应用程序层。
- 我假设AuthCtrl是域?谁创建AuthCtrl?它存在于哪一层