2015-02-06 4 views
-4

Я разрабатываю приложение для редактирования изображений, и какой подход лучше подходит для дизайна классов из упомянутого ниже? Любой из трех или любой новый?Какой дизайн OO лучше и почему?

Первый

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){} 

} 

пожалуйста, обсудить плюсы и минусы как для подхода.

+0

Ну, вы хотели бы создать класс изображения, содержащий все 4 переменные, первый частный. Затем в вашем классе редактора вы хотите создать объект изображения. –

+0

Это может быть лучше на Programming.SE. Это довольно самоуверенно. Мое мнение: ни; как насчет графа фильтра? Операциями с изображениями являются фильтры (вращение, выравнивание гистограммы и т. Д.). Изображение переходит в фильтр, новое (измененное) изображение выходит из фильтра. Легче добавлять новые фильтры и плагины. И фильтры могут быть скомпонованы в более крупный график (поэтому новые «операции» могут быть выставлены пользователю, которые на самом деле представляют собой комбинацию нескольких фильтров нижнего уровня). – Cornstalks

ответ

1

В моей точке зрения, я думаю, что вы можете пойти дальше в рамках принципа единой ответственности (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*/ 
    } 
} 
0

Лучше выделить объекты данных из объектов манипуляции. Это позволит вам создавать различные реализации ваших объектов манипуляции, а также допускать издевательство, что помогает при модульном тестировании.

Вы также должны создавать интерфейсы для своих классов и, когда это возможно, использовать их в подписях ваших методов класса. Классы должны избегать прямого обращения к другим классам. Вместо этого передавайте зависимости в конструктор, который принимает интерфейсы. Это известно как инъекция зависимости.

 Смежные вопросы

  • Нет связанных вопросов^_^