Дизайн наследования - PullRequest
       5

Дизайн наследования

0 голосов
/ 20 декабря 2010

Прямо сейчас у меня есть следующий дизайн:

                      Item
            |------------------------|
       ImageUploader                 |
     |--------------|                |
     |              |                |
AvatarUploader   FaviconUploader   NameChanger

Эти классы представляют собой различные предметы, которые пользователи могут приобретать и использовать.

Однако я добавляю новый класс IconUploader. В отличие от других классов, это не элемент, который можно использовать, а административная панель. ImageUploader содержит определенные проверки безопасности, чтобы убедиться, что загружены только безопасные файлы, а IconUploader также требует этих мер предосторожности.

Однако я не уверен, что делать. В идеале я бы сделал ImageUploader интерфейсом, но у вас не может быть реального кода в интерфейсах, поэтому я не могу этого сделать. Я мог бы вывести ImageUploader из иерархии классов Item и сделать его функции статичными, но мне это не кажется правильным. Это? И если это не так, каков наилучший способ реструктурировать это?

N.B .: Я использую PHP, если это влияет на что-либо.

Ответы [ 3 ]

0 голосов
/ 20 декабря 2010

Вам нужен класс ImageUploaderBase, который является абстрактным и имеет общую функциональность.

0 голосов
/ 20 декабря 2010

Вы можете переместить проверку безопасности и общие функции загрузки для загрузчиков в отдельный класс Uploader , и заставить ImageUploader использовать этот класс Uploader (так что все производные классы, такие как Avatar / FaviconUploader, также будут использовать его).

Затем вы можете заставить IconUploader использовать Uploader (без его извлечения из Item).

Затем вы можете заставить ImageUploader и IconUploader реализовать интерфейс IUploader и иметь всевызовы интерфейса, перенаправленные в класс Uploader для реализации.

0 голосов
/ 20 декабря 2010

Вероятно, у вас должно быть GenericUploader, и тогда каждый тип загрузчика может указать список допустимых файлов, тогда GenericUploader обеспечит выполнение этих требований (наряду со всем, что вы, возможно, пожелаете сделать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...