2013-04-10 2 views
0

Я написал плагин wordpress, который отлично работает. Тем не менее, он просто работает, но здесь нет ООП, потому что в то время необходимо было что-то построить как можно скорее. Я прочитал некоторую литературу и обнаружил, что php не поддерживает множественное наследование из-за проблемы с алмазами.Нужно руководствоваться рефакторингом моего PHP-кода в концепции ООП

Текущий сценарий:

Flickr 
--pic importer 
----1. sql.php 
----2. javascript.php 
----3. call to show database contents 

--photoset importer 
----1. sql.php 
----2. javascript.php 
----3. call to show database contents 

Здесь я создал 2 класс: picImporter и photosetImporter. Оба класса имеют общее содержимое от (1. sql.php и 2. javascript.php), но точка-3 (реализация отображения содержимого базы данных для них отличается).

Итак, моя идея: я должен создать еще один класс Global и photosetImporter, picImporter класс должен расширять этот класс. В глобальном классе должен быть абстрактный класс, который должен определить дочерний класс. Таким образом, конструкция становится:

Class Global{ 
    //$sql comes sql.php, 
    //$javacript comes javascript.php, 
    abstract protected function showDatabaseContents(); 
} 

Class picImporter extends Global{ 
    protected function showDatabaseContents() { 
     //implementation using **$sql** from base 
    } 
} 

Class photosetImporter extends Global{ 
    protected function showDatabaseContents() { 
     //implementation using **$javascript** from base 
    } 
} 

Прежде чем продолжить, я просто хочу знать, если я нахожусь на правильном пути или нет и дальнейших инструкций, если это возможно.

Thanks, -S.

+0

Вы когда-нибудь слышали о 'has-a/is-a' отношениях/зависимостях инъекций/твердых принципах? – Yang

+0

Нет. Можете ли вы навестить меня на простом примере? Статья Википедии кажется пугающей с первого взгляда, поскольку я понятия не имею об этом. – seoul

+0

Просто читайте и впитывайте сначала. Вероятно, это будет бессмысленно, пока оно уже не в вашей голове, и вы подходите к новой проблеме, и эти принципы приходят вам в качестве логического подхода к ее решению. – Jason

ответ

0

Нет особого «правильного» способа сделать то, что вы ищете (хотя есть неправильные способы). Трудно понять, какой метод я бы использовал, не понимая, что делает ваш класс javascript.

Как правило, я создаю единый глобальный класс абстракции БД (что я предполагаю, что у вас есть класс sql) и просто получаю доступ к нему из глобальной области, где бы я ни нуждался. Глобальная область не является злом, особенно для таких вещей, как доступ к базе данных, которые не являются неотъемлемой частью любых других классов, которые вы создаете, но требуются почти везде. То же самое можно сказать и о вашем классе javascript.

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

Если вы ищете, что может быть лучшей практикой, запустите поиск «шаблонов проектирования PHP», но в целом мой подход с PHP заключается в том, чтобы сохранить его простым и доступным. Это может означать использование шаблона проектирования, или это может означать более фундаментальный подход, в зависимости.

+0

Javascrip.php просто выделит некоторые необходимые функции javascript для интерфейса. Прямо сейчас меня больше беспокоит непротиворечивость и радует, что разумный класс соединений sql в глобальном масштабе не плох :-) – seoul

+0

Попытка изучить и реализовать эти виды понятий сразу, если вы не знакомы с такими вещами, как шаблоны проектирования или вышеупомянутые понятия «a/is-a» и другие могут быть похожи на выпивку из пожарной машины, и вы, вероятно, будете делать это плохо, если не потратите времени, чтобы научиться делать это правильно. Если ваше приложение чувствительно к времени, тогда идите и пропишите его таким образом, который имеет смысл для вас.Но либо используйте этот проект, либо создайте еще один, который вы можете написать и переписать, когда узнаете больше об этих принципах. – Jason

+0

Я читал о шаблоне дизайна в своем курсе бакалавриата 4 года назад, но забыл из-за отсутствия практики. Я начну с некоторых базовых шаблонов дизайна, найденных в статье ibm.com. Затем я рассмотрю «да/нет» для реализации каждого шаблона в этом случае ... Надеюсь, это не имеет значения, я прав или не прав, или проверка шаблона дает да/нет, но практика чтения и мышления поможет в предстоящем дней. Спасибо за ваш комментарий. – seoul

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