如何在保持前端交互的同时避免前端出现业务逻辑
How to avoid business logic in frontend while keeping frontend interactive
我是一个 DDD 业余爱好者,我不确定我是否正确地表达了这个问题,或者这是否与 DDD 有关,但这就是我在项目中尝试实施 DDD 时一直困扰的问题。
假设我的系统是一个销售订单管理系统,用户可以在其中为每个订单输入多行销售订单。现在,行金额可以是(我们客户的)基础货币,也可以是外币,在这种情况下,需要乘以每个月不同的预定汇率,将其转换为基础货币。
我认为这个金额转换是一个业务规则,因此应该在领域层。但是,我也希望我的用户能够输入外币金额,然后自动计算基础货币金额并在表格中填写,而无需明确提交任何数据。这看起来需要在前端进行,因此违反了“前端无业务规则”的规则。
您将如何实施?
我认为主要有3种情况:
逻辑已经存在于后端。在那种情况下,想要避免重复的最明显的途径是在后端公开一个 API 允许客户端利用该逻辑。假设延迟保持合理,通常可以使多层交互对用户几乎透明。
这是业务逻辑,但后端不关心。在您的示例中,如果后端始终以基础货币(例如美元)工作并且汇率只需要在客户端然后只在客户端实现这样的逻辑。它成为特定于客户的问题。虽然它仍然是业务逻辑(业务逻辑不限于特定层),因此它应该在客户端中保持原样。例如,将该逻辑保留在客户端服务中,而不是与表示问题混合在一起。也实施单元测试,因为它是核心逻辑。
是后台的业务逻辑,但是延迟太高了。那么你必须在客户端复制尽可能多的逻辑来满足绩效目标。您可以手动或通过代码生成策略(例如,将一种语言转换为另一种语言)。
我是一个 DDD 业余爱好者,我不确定我是否正确地表达了这个问题,或者这是否与 DDD 有关,但这就是我在项目中尝试实施 DDD 时一直困扰的问题。
假设我的系统是一个销售订单管理系统,用户可以在其中为每个订单输入多行销售订单。现在,行金额可以是(我们客户的)基础货币,也可以是外币,在这种情况下,需要乘以每个月不同的预定汇率,将其转换为基础货币。
我认为这个金额转换是一个业务规则,因此应该在领域层。但是,我也希望我的用户能够输入外币金额,然后自动计算基础货币金额并在表格中填写,而无需明确提交任何数据。这看起来需要在前端进行,因此违反了“前端无业务规则”的规则。
您将如何实施?
我认为主要有3种情况:
逻辑已经存在于后端。在那种情况下,想要避免重复的最明显的途径是在后端公开一个 API 允许客户端利用该逻辑。假设延迟保持合理,通常可以使多层交互对用户几乎透明。
这是业务逻辑,但后端不关心。在您的示例中,如果后端始终以基础货币(例如美元)工作并且汇率只需要在客户端然后只在客户端实现这样的逻辑。它成为特定于客户的问题。虽然它仍然是业务逻辑(业务逻辑不限于特定层),因此它应该在客户端中保持原样。例如,将该逻辑保留在客户端服务中,而不是与表示问题混合在一起。也实施单元测试,因为它是核心逻辑。
是后台的业务逻辑,但是延迟太高了。那么你必须在客户端复制尽可能多的逻辑来满足绩效目标。您可以手动或通过代码生成策略(例如,将一种语言转换为另一种语言)。