- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:
我想通过创建一个具有两个选项卡的简单Web应用程序来利用DDD基础知识:
用户注册
已注册用户的列表
让我们假设这是一个REST应用,所以我们只发送和接收JSON数据
使用贫血模型,我可能会创建:
UserRegisterDTO(保存在标签1中,可能带有一些注释,例如休眠验证或某些特定的类型映射)
UserViewDTO(在选项卡2中检索)
用户(带有getter / setter的贫血领域对象,POJO)
UserEntity(显然由ORM使用,带有所有必需的注释@ Entity,@ Id等)
UserRegisterDTOToUserMapper和UserToUserViewDTOMapper(我只是讨厌映射器...但是eh。您知道它们用于; p)
UserController
registerUser(UserRegisterDTO):它通过POST(通过Spring从JSON反序列化)接收UserRegisterDTO,调用UserRegisterDTOToUserMapper,然后调用UserService,该服务返回一些愚蠢的字符串响应,例如“用户创建”或“无法创建用户”,然后转发给客户使用正确的http代码;
listAllUsers():它接收所有用户的GET,调用UserService,调用UserToUserViewDTOMapper并返回UserViewDTO列表(Spring将其序列化为JSON)
UserToUserEntityMapper和UserEntityToUserMapper(n / c)
用户服务
registerUser(User):调用UserToUserEntityMapper,然后调用UserRepository,就是这样
listAllUsers():调用UserRepository,然后调用UserToUserEntityMapper,就是这样
UserRepository(扩展JpaRepository或其他功能的接口,这是我们的数据库CRUD,包含所有喜欢的方法,如listAll()和东西)
我认为相当多的课程和很多混乱的情况。所以这是我的问题:
我应该如何摆脱制图员?我的想法是:
UserRegisterDTO有一个新方法:User getDomainObject()或类似的东西,而UserViewDTO有一个新的构造函数:UserViewDTO(User user)
要点1.1颠倒了-用户具有新的构造函数User(UserRegisterDTO userDTO),而用户具有新的方法UserViewDTO getUserViewDTO或类似的方法
坚持只使用构造函数:因此User具有新的构造函数User(UserRegisterDTO userDTO),而UserViewDTO具有新的构造函数:UserViewDTO(User user)
让我们暂时将UserToUserEntityMapper和UserEntityToUserMapper排除在讨论之外
我认为将“后端”对象与“视图”对象分开是一个好主意,因此我将保留DTO。你同意吗?
根据我对DDD的了解,域对象应该能够照顾好自己。因此,可以说我通过UserRegisterDTO.getDomainObject()在UserController中创建了一个新用户。因此,要坚持下去,最好调用User.save(),对吗?
如果上述问题的答案是肯定的-我的用户可能应该将UserRepository注入了用户,我是否正确?如果不是,我应该如何实施?如果是,在这里构造函数注入似乎是一个糟糕的主意,因为我的用户可能是在DTO中创建的...
这也引发了一个问题-我真的应该将UserEntity与User分开吗?如果这样做-我将持久层与域对象分开,这似乎是个好主意,但同时也会带来一些问题(例如,两者之间的映射)。因此,重复这个问题:我是否应该将UserEntity与User真正分开?
最后一个问题(现在是xd)是:假设上述所有问题都已解决,是否还应该摆脱UserService类?毕竟,我的用户现在可以保存自己,并且可以使用静态方法(或其他方法)来检索所有用户。并且如果UserService停留在这里(例如,检索所有用户,因为静态方法很丑陋,那就如此)如何确定应在UserService中使用哪些方法以及在User内部使用哪些方法?
总结这段篇幅非常长的文章,其中代码完全为零:
请回答上述问题,以帮助我了解DDD的基础知识。他们有一个数字是有原因的,因此,如果您只想回答其中一些数字,请随意这样做:)
提前致谢!
最佳答案
我认为您对DDD概念有些困惑。
DDD的重点是业务逻辑和有界上下文的抽象,而不是实现。不要将Web应用程序的域对象与域驱动设计的概念(例如实体,值对象和聚合规则)相混淆。
Here您有一个很棒的文档,我建议您阅读Eric J. Evans的著作“ Domain Driven Design”,他是该技术的创造者。
希望对您有所帮助
关于java - 如何在考虑DDD的基础上构建一个简单的REST应用( Spring / hibernate )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39562882/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!