Java 设计方法(领域驱动或服务驱动)
我的问题陈述是: 我想写设计文件管理(添加、复制、删除等操作)。有两种方法:Java 设计方法(领域驱动或服务驱动),java,architecture,domain-driven-design,Java,Architecture,Domain Driven Design,我的问题陈述是: 我想写设计文件管理(添加、复制、删除等操作)。有两种方法: 服务驱动方法 写入仅包含文件属性的文件VO。例如 public Class File { private boolean hidden; private boolean read; private boolean write; public boolean isHidden() { return hidden; } public void setHid
public Class File {
private boolean hidden;
private boolean read;
private boolean write;
public boolean isHidden() {
return hidden;
}
public void setHidden(boolean hidden) {
this.hidden = hidden;
}
public boolean isRead() {
return read;
}
public void setRead(boolean read) {
this.read = read;
}
public boolean isWrite() {
return write;
}
public void setWrite(boolean write) {
this.write = write;
}
}
并为与文件相关的操作分离服务。例如:
public Class FileService {
public boolean deleteFile(File file) {
//Add delete logic.
}
//Same way you can add methods for Add and copy file.
}
public class File {
private boolean hidden;
private boolean read;
private boolean write;
public boolean isHidden() {
return hidden;
}
public void setHidden(boolean hidden) {
this.hidden = hidden;
}
public boolean isRead() {
return read;
}
public void setRead(boolean read) {
this.read = read;
}
public boolean isWrite() {
return write;
}
public void setWrite(boolean write) {
this.write = write;
}
public boolean deleteFile() {
//Add delete logic.
}
//Same way you can add methods for Add and copy file.
}
那么,这两种方法的优缺点是什么呢?如果没有太多关于您正在设计的系统类型的信息,很难发音。对我来说,选择取决于系统边界 如果您需要提供作为服务公开并可供外部消费者访问的API,请选择解决方案1,这是唯一的方法。如果您的系统是一个库,它的API将由其他应用程序在内部使用,那么请选择解决方案2中的富域模型,它更适合面向对象。您不想用服务类、管理类和实用程序类来扩充API,因为这些类不存在真正的原因
但是,在不知道最终目标的情况下,很难说清楚。在面向对象语言中,将逻辑放在类本身而不是服务类中,是典型的方法(在IMO中更好)。它遵循“告诉,不要问”的原则,例如,告诉一个文件删除自己,而不是要求某个服务删除它。这背后的一个主要原因是允许继承。例如,如果您有一个子类File,并且希望它在被删除之前编写一条日志消息,那么使用服务类就很难做到这一点,因为您需要为每个子类使用不同的服务类 就面向服务的方法而言,这通常是在更高的层次上考虑的(即面向服务的体系结构)。考虑一个金融股票系统,你可能有一个“买入股票”服务和一个“卖出股票”的服务。拥有一个与单个类相对应的服务类(即股票服务,它知道如何买卖股票)并不是非常面向对象的 您的系统中可能还有一个服务层,它提供与其他外部服务(即数据库)的集成点,但我想这不是您在这里讨论的内容。因此,我可以坚持将逻辑封装在文件类本身中的方法