域驱动开发和丰富的GUI
本文关键字:GUI 开发 | 更新日期: 2023-09-27 18:01:03
我有一个关于将DDD应用于丰富GUI应用程序开发的哲学问题。作为一名程序员,我在创建DDD和面向DB的系统方面都有经验,所以我知道基础知识。现在我面临着一个大型销售点应用程序的完全重新设计,我遇到了一个问题。
通常DDD概念的意思是"99%的逻辑在域中,1%的逻辑在GUI中";GUI中的逻辑只是一种验证。当你有简单的表单时,这种方法效果很好,用户可以输入一些内容,然后按"保存"将数据发送到服务器或类似的smth。
现有应用程序的一个主要功能是快速。在POS上工作意味着销售人员可以快速完成所有工作。POS必须遵循的业务逻辑非常复杂。大致来说,每次用户更改价格、税费、折扣等其他价格、折扣、税费等时都会发生变化;所以它是一种驻留在客户端上的域。
显然,从技术上讲,我可以将逻辑移动到服务器上的远程域,但这会使系统非常缓慢。每次用户在UI中进行更改时,我都需要进行远程调用。
对于如何保持DDD的纯度,同时使系统快速运行,有什么想法吗?
谢谢!
附言:我现在看到的唯一方法是使用一个包含域的可下载程序集,但它看起来绝对像一个黑客。。。
为了在UI响应性和强制DDD的纯度之间找到正确的平衡,需要仔细管理一个明确的权衡。
就我个人而言,我喜欢采取默认的立场,从"纯"开始,只允许在实际世界的性能测试证明有必要的情况下向DDD模式妥协。
我经常发现令人惊讶的是,在不影响客户端响应的情况下,有多少逻辑可以保留在服务器上,因为瓶颈不一定在你期望的地方。
一个概念是在客户端上进行一些快速验证,它并不试图100%准确,但可能可以检测到95%的无效输入。
在您的示例中,这种快速验证可以检查以下内容:
- 折扣大于0并且<价格
- 税率在0%到25%之间
只有当输入通过了快速客户端测试时,才会将其发送到服务器进行完全验证。
例如,假设我们有一个快速的客户端验证,准确率为95%。这意味着,当用户输入无效数据时,在95%的情况下,UI将显示错误,而无需与服务器联系。
只有5%的无效输入数据会导致在与服务器联系后首先显示错误。如果用户通常不提供无效数据,这可能是可以的——这在一定程度上取决于UI设计得有多好
关键-快速验证决不能说有效数据无效
您可能可以尝试使用分开的"两个应用程序"(两个模块(,每个应用程序都是DDD哲学中的一个:-POS中的客户服务-在"服务器"中购买服务。。。这两个模块必须集成。。。例如通过网络。。。