Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与分层应用程序中的域逻辑相同的复杂表示逻辑_C#_Design Patterns - Fatal编程技术网

C# 与分层应用程序中的域逻辑相同的复杂表示逻辑

C# 与分层应用程序中的域逻辑相同的复杂表示逻辑,c#,design-patterns,C#,Design Patterns,我在后台编写具有复杂域的分层应用程序。在服务器端,有一个复杂的类文档,例如Price属性。价格由策略模式类计算,如ManualEnteredPrice、DistributedPrice、DiscountedPrice和其他。 在单元测试中,一切正常,价格计算,文档加载并存储在数据库中,等等。 现在,我将编写富客户端winforms和web门户javascript来处理文档。我将DataTransferObjects用于项目,并通过WCF从客户机的服务层传递数据。在客户机中,我在表单中构建某种vi

我在后台编写具有复杂域的分层应用程序。在服务器端,有一个复杂的类文档,例如Price属性。价格由策略模式类计算,如ManualEnteredPrice、DistributedPrice、DiscountedPrice和其他。 在单元测试中,一切正常,价格计算,文档加载并存储在数据库中,等等。 现在,我将编写富客户端winforms和web门户javascript来处理文档。我将DataTransferObjects用于项目,并通过WCF从客户机的服务层传递数据。在客户机中,我在表单中构建某种viewmodels绑定,并在web中从数据传输对象中删除。我必须再写一次价格计算逻辑,用于展示目的。一些用于选择策略的单选按钮,一些用于输入数据的控件,以及用于计算价格以显示价格的类似价格策略类。然后,当我将DTO传递回服务器时,我不使用计算出的价格,因为我不能相信它的价值。我必须在文档中填写一些字段,然后重新计算价格。 所以,我有两个不同的类层次结构,做同样的事情-价格计算

这是正确的吗?也许还有别的办法?当相同的逻辑在域和客户机上时,通常会出现这种情况。您如何规划这个架构

我不能在客户机中重用域,因为客户机的类有一些不同的字段或其他字段或行为

我不能只将价格计算传递给服务层,因为它取决于文档状态、状态和许多其他文档内容。我是否应该将重新计算价格的整个文档传递给服务,然后在viewmodel中接收并设置价格


如何实现与域逻辑相同的表示逻辑?

我认为您的方法是正确的。正如您可能理解的,做出架构决策有一些权衡。遵循这种特定的方法,您有很多好处—数据完整性、关注点分离、代码依赖性最小等。另一方面,您重复了很多逻辑,并且您认为这可能不太容易维护

我会选择遵循您的方法,因为我认为层之间的唯一依赖关系是逻辑的。这种逻辑依赖关系不能丢弃。另一方面,遵循您的体系结构已经最小化了代码依赖性,这是任何软件开发体系结构的主要关注点


希望我能帮忙

但我相信,有一些方法可以通过代码重用方面扩展这个体系结构,这样我们就可以维护应用程序逻辑,并以较少的工作量和较少的bug保持它的一致性。谢谢你的语法改正,很遗憾,我的英语不好。