Как я могу обработать несколько представлений объекта данных?Какой шаблон дизайна приемлем? - PullRequest
1 голос
/ 21 декабря 2010

У меня есть объект человек.

class Person {
    private $name;

    ...
}

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

class PersonDisplay {
    public function displayList() {
        // Query database
        // Output html to display in list mode
    }

    public function displayPhoto() {
        // Query database
        // Output html to display in photo mode
    }
}

Это приемлемый способ справиться с представлением элементов на внешнем интерфейсе, или есть какой-то конкретный шаблон проектирования, который я должен изучить, чтобы помочь мне с этой задачей? Есть ли у кого-нибудь предложения или идеи, где это может пойти не так, или если это может потенциально сделать обслуживание кошмаром?

Объект Person был просто примером, очень похожим на то, что я использую.

Ответы [ 2 ]

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

Похоже, что вы хотите (и используете) шаблон Observer.http://en.wikipedia.org/wiki/Observer_pattern#PHP

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

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

Я чувствую, что многие люди попадают в «волну лучших практик», где всегда лучше следовать тому, что говорят элитные программисты.Вот мое мнение:

Если оно работает и оно довольно элегантно, используйте его.

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

С точки зрения того, что будет наиболее приемлемым, у вас есть два принципиально разных представления: сетка и список.Если вы предполагаете, что вам понадобятся два отдельных фрагмента HTML для каждого, если вы не дублируете код вверх и вниз, то это нормально.Если вы видите, что дублируете много кода, создаете приватную функцию в PersonDisplay и централизуете там логику.

Честно говоря, кажется, что этот фрагмент кода не будет сильно растискажем, тысяча строк кода (макс.)Используйте здравый смысл и проверяйте реальность время от времени.Если вы видите, что создаете слишком много функций, объедините некоторые функции.Если вы пишете повторяющийся код, переместите этот код в отдельную функцию.Вы действительно не можете испортить это слишком много.

Как говорится, "не парься по мелочам".Вы можете позволить себе время от времени иметь немного несовершенный код.

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