Sil*_*ior 4 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 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;
}
}
Run Code Online (Sandbox Code Playgroud)
并为文件相关操作分离服务.例如:
public Class FileService {
public boolean deleteFile(File file) {
//Add delete logic.
}
//Same way you can add methods for Add and copy file.
}
Run Code Online (Sandbox Code Playgroud)
文件VO包含所有属性和所需操作的位置:
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.
}
Run Code Online (Sandbox Code Playgroud)
那么这两种方法的优点和缺点是什么?
在面向对象的语言中,将逻辑放在类本身而不是服务类中是典型的方法(以及更好的IMO).它遵循"告诉,不要问"原则,例如,通过告诉文件删除自己,而不是要求某些服务删除它.这背后的主要原因之一是允许继承.例如,如果您有一个File的子类并希望在删除它之前编写一条日志消息,那么对于服务类来说这很难做到,因为您需要为每个子类使用不同的服务类.
就面向服务的方法而言,这通常被认为是更高层次的(即面向服务的架构).考虑一个金融股票系统,您可能有"买入股票"服务和"卖出股票"服务.拥有一个对应于各个类的服务类(即一个知道如何买卖股票的股票服务)不会非常面向对象.
您可能还在系统中有一个服务层,它提供与其他外部服务(即数据库)的集成点,但同样,我不认为这就是您在这里所说的.所以,我可以坚持在File类本身封装逻辑的方法.
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |