当您从控制器内的UI接收字符串格式的参数时,是否直接将字符串传递给应用程序服务(或命令)?
或者,您是否从控制器内的字符串创建值对象?
new Command(new SomeId("id"), Weight.create("80 kg"), new Date())
Run Code Online (Sandbox Code Playgroud)
要么
new Command("id", "80 kg", new Date())
new Command("id", "80", "kg", new Date())
Run Code Online (Sandbox Code Playgroud)
也许这不重要,但它困扰我.
问题是,我们应该将域中的值对象耦合到控制器(内部)吗?
想象一下,在应用程序层和表示层之间没有Web(如android活动或swing),你会在UI中推动使用值对象吗?
另外,你是否将值对象序列化/反序列化为字符串?
Weight weight = Weight.create("80 kg");
weight.getValue().equals(80.0);
weight.getUnit().equals(Unit.KILOGRAMS);
weight.toString().equals("80 kg");
Run Code Online (Sandbox Code Playgroud)
在将字符串传递给命令的情况下,我宁愿传递"80 kg"而不是"80"和"kg".
对不起,如果问题不相关或有趣.
谢谢.
我在搜索有关完全不同的主题的信息时遇到了这个帖子:CQRS中的值对象 - 在哪里使用
他们似乎更喜欢基元或DTO,并将VO保留在域内.
我还看了V. Vernon(实施DDD)这本书,它在第14章(第522页)中谈到(确切地说是-_-)
我注意到他在没有任何DTO的情况下使用命令.
someCommand.setId("id");
someCommand.setWeightValue("80");
someCommand.setWeightUnit("kg");
someCommand.setOtherWeight("80 kg");
someCommand.setDate("17/03/2015 17:28:35");
someCommand.setUserName("...");
someCommand.setUserAttribute("...");
someCommand.setUserOtherAttributePartA("...");
someCommand.setUserOtherAttributePartB("...");
Run Code Online (Sandbox Code Playgroud)
它是由控制器映射的命令对象.值对象初始化将出现在命令处理程序方法中,并且它们会在值不正确的情况下抛出一些东西(初始化中的自我验证).
我想我开始不那么烦恼,但其他一些意见也会受到欢迎.