[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как обойтись без статического свойства
McLotos
Всем привет! У меня очередной бзик, который заставляет меня долго думать над задачей. Суть задачи в следующем:
Есть класс Template, он вызывается классом View, от которого наледуется несколько других классов.
Каждый наследник класса View вызывает у родителя метод assign(), который в свою очередь записывает принимаемые данные в одно из свойств объекта Template.
Получается так, что каждый следующий дочерний объект класса View перезатирает результаты предыдущих.
В качестве самого простого решения, можно просто сделать свойство статическим и обучить метод assign дозаписывать данные туда, но мне хочется обойтись без статики.
Как второе решение, в классе View проверять вызывался ли ранее объект Template, но в таком случае тоже придется делать статическую переменную, только уже на уровне класса View.
Как можно обойтись в этой ситуации без статики?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
AllesKlar
А чем статические поля не угодили? Полезный инструмент.

_____________
[продано копирайтерам]
McLotos
Цитата (AllesKlar @ 24.02.2017 - 20:13)
А чем статические поля не угодили?

ну не знаю. как-то я с ними не подружился, наверное потому-что в проекте, который я обслуживаю всё построено только на статических свойствах и статических методах, т.е. проект состоит из огромной кучи "классов", и ни одного объекта =)
в общем просто достали =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
AllesKlar
Ну давай с другой стороны (на пальцах):
Есть родительский класс, и куча наследников.
Для всех наследников одно из полей родительского класса должно быть общим.
Вывод? Это статическое поле.
Ну хочешь извращений, запили синглтон, как поле родителя, и будет тебе не статическое. Только зачем городить?

Если все свойства и методы статические, может так надо было?
Мы же не знаем суть проекта.


_____________
[продано копирайтерам]
McLotos
Цитата (AllesKlar @ 24.02.2017 - 20:55)
Для всех наследников одно из полей родительского класса должно быть общим.

Не совсем так, в родительском объекте View вызывается объект Template, у которого в свою очередь есть нужное свойство.
поэтому тут можно либо Template сделать синглотом или сделать его свойство статическим, или сделать у класса View статическое свойство, в котором хранить объект Template. Но мне кажется что должен быть способ без статики, а если использовать магические методы типа sleep и wakeup?


Цитата (AllesKlar @ 24.02.2017 - 20:55)
Если все свойства и методы статические, может так надо было?

просто это попытка приподнести процедурное программирование как ООП =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
AllesKlar
Цитата (McLotos @ 24.02.2017 - 17:30)
просто это попытка приподнести процедурное программирование как ООП =)


Ну ХЗ, иногда бывает нужны утилиты из core, которые глупые по отношению данных и общие для любых приложений.
public static void download(Url source, File destination ); 

Чисто статический метод, зачем ради него порождать объект :)

_____________
[продано копирайтерам]
chee
Ты можешь просто передать архитектуру.

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

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

Если оставить решения таким как у тебя, то возьми Pimple, интегрируй его в свой проект и вызывай Template как синглтон. Используя Pimple ты хоть не так зашкваришся с методологической точки зрения.

P.S: Вообще в данной ситуации Template лучше не делать одиночкой, а для каждой вьюхи инициализировать свой Template.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
McLotos
Цитата (AllesKlar @ 24.02.2017 - 23:24)
Чисто статический метод, зачем ради него порождать объект smile.gif

может тогда просто не стоит делать их него метод? Может он просто функция?
Цитата (chee @ 25.02.2017 - 00:22)
P.S: Вообще в данной ситуации Template лучше не делать одиночкой, а для каждой вьюхи инициализировать свой Template.

не получится, просто потому-что может быть допустим такая ситуация:
1. есть базовый View и от него наследуется View текущего модуля
2. На странице в определенном месте шаблона должен быть встроен View отключаемого компонента, например менюшка или форма авторизации.

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Гость_chee
McLotos, все равно не понятно, почему не получиься, ты же должен брать данные из вьюшек, а не из объекта шаблонизатора. Если у тебя шабллонизатор используется как хранилище данных, то стоит переработать архитектуру.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.