![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
evilsoul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 31.3.2006 Репутация: нет Всего: 0 |
Всем добрый день или ночь.
Собственно перейдем сразу к делу. Есть некий класс, назовем его Foo, в системе создаются экземпляры этого класса. new Foo([набор основных параметров 1], [второстепенные параметры]); new Foo([набор основных параметров 2], [второстепенные параметры]); new Foo([набор основных параметров 3], [второстепенные параметры]); Причем все время используются только эти три набора основных параметров, хотелось бы избавится от постояного указывания этих основных параметров. Есть несколько мыслей как это сделать: - Наследоваться от этого класса и породить еще три класса в котором будут уже жестко вбиты основные параметры. - Использовать фабрику для создания нужных экземпляров класса. - Комбинация первых двух вариантов, создать дочерние классы и в фабрике порождать уже объекты этих классов. Насколько приемлем варинат, если добавить в класс Foo статические методы вида
Буду рад любому конструктивному и более-менее развернотому совету. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Если кроме конструкторов никаких другого нового поведения не предполагается, то лучше Кто гарантирует, что не появится новый набор "постоянных параметров"? Если фабрика уже есть, то выбор должен быть туда. Третий вариант проигрывает по эффетивности первым двум, а визуально и по смыслу ничего нового не добавляет. Если нет пока фабрики, то можно подумать о множественных конструкторах, вроде примера со статическими функциями. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
||||
|
||||
Sentox |
|
|||
как то так ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 27.1.2009 Где: Зимбабве Репутация: 7 Всего: 7 |
Если классы являются какой то одно концепции или абстракции лучше создавать инициализацию параметров в абстрактной фабрике. Но этот способ несколько скрывает понимание архитектуры, то есть инициализация параметров находится на "скрытом" уровне.
Если есть прямое указание для создания дочернего как типа "является" (as-is), как сказал baldina, лучше наследование, так как понимание и чтение архитектуры, кода клиента увеличивается. Так же увеличивается инкапсуляция типовых параметров. Судя по всему, основные параметры у Вас и есть свойства типов, если это так, лучше выделить в дочерние (расширяемые классы). Это сообщение отредактировал(а) Sentox - 1.6.2012, 20:47 |
|||
|
||||
evilsoul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 31.3.2006 Репутация: нет Всего: 0 |
Спасибо всем за помощь, ваше мнение помогло мне с решением, я склонился в сторону создания дочерних классов.
Добавлено через 12 минут и 21 секунду
А можно как-нибудь на примере, насколько я знаю, пхп не позволяет описать несколько конструкторов для класса. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
А чем собственный вариант не подходит? Вызыать его нужно не через new, вот и вся разница
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
evilsoul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 31.3.2006 Репутация: нет Всего: 0 |
Все понял, спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |