哪种 OO 设计更好,为什么?
Which OO Design is better and why?
我正在开发一个图像编辑器应用程序,下面提到的 class 设计哪种方法更好?三个中的任何一个或任何新的?
第一个
class Image{
string path
rotateLeft(){};
rotateRight(){};
changeBrightness(){};
}
或第二
class Image{
string path
}
Image image = new Image();
Class Editor{
rotateLeft(Image image){}
rotateRight(Image image){}
changeBrightness(Image image){}
}
或第三
Interface Operation{
rotateLeft(Image image);
rotateRight(Image image);
changeBrightness(Image image);
}
class Image Implements Operation{
string path;
rotateLeft(this){}
rotateRight(this){}
changeBrightness(this){}
}
请讨论这两种方法的优缺点。
最好将数据对象与操作对象分开。这将允许您创建操作对象的不同实现,并且还允许进行有助于单元测试的模拟。
您还应该为 classes 创建接口,并尽可能在 class 方法的签名中使用它们。 类 应避免直接引用其他 class。相反,将依赖项传递到采用接口的构造函数中。这就是所谓的依赖注入。
在我看来,我认为您可以在单一职责原则 (RSP) 方面走得更远。但我不太确定它是否与为编辑器制作界面有关。
class Image{
string path
}
Image image = new Image();
interface Rotatory {
rotate(image);
}
class RightRotator implements Rotatory{
rotate(image){
/*Your implementation*/
}
}
class LeftRotator implements Rotatory{
rotate(image){
/*Your implementation*/
}
}
interface Editor{
change(image);
}
class Brightness implements Editor{
change(image){
/*Your implementation*/
}
}
我正在开发一个图像编辑器应用程序,下面提到的 class 设计哪种方法更好?三个中的任何一个或任何新的?
第一个
class Image{
string path
rotateLeft(){};
rotateRight(){};
changeBrightness(){};
}
或第二
class Image{
string path
}
Image image = new Image();
Class Editor{
rotateLeft(Image image){}
rotateRight(Image image){}
changeBrightness(Image image){}
}
或第三
Interface Operation{
rotateLeft(Image image);
rotateRight(Image image);
changeBrightness(Image image);
}
class Image Implements Operation{
string path;
rotateLeft(this){}
rotateRight(this){}
changeBrightness(this){}
}
请讨论这两种方法的优缺点。
最好将数据对象与操作对象分开。这将允许您创建操作对象的不同实现,并且还允许进行有助于单元测试的模拟。
您还应该为 classes 创建接口,并尽可能在 class 方法的签名中使用它们。 类 应避免直接引用其他 class。相反,将依赖项传递到采用接口的构造函数中。这就是所谓的依赖注入。
在我看来,我认为您可以在单一职责原则 (RSP) 方面走得更远。但我不太确定它是否与为编辑器制作界面有关。
class Image{
string path
}
Image image = new Image();
interface Rotatory {
rotate(image);
}
class RightRotator implements Rotatory{
rotate(image){
/*Your implementation*/
}
}
class LeftRotator implements Rotatory{
rotate(image){
/*Your implementation*/
}
}
interface Editor{
change(image);
}
class Brightness implements Editor{
change(image){
/*Your implementation*/
}
}