Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
53ifbb
55 / 54 / 21
Регистрация: 01.03.2016
Сообщений: 570
1

Модель проектирования, не могу определиться

21.05.2018, 19:12. Просмотров 157. Ответов 6
Метки нет (Все метки)

Мне нужны ваши советы.
Описываю: Имеются готовые классы без конструкторов (но желательно, что бы была возможность конструирования с разным кол-ом аргументов при создании экземпляра), в каждом есть метод реализующий конструктор. Объекты я капсулирую в статичных переменных через статичные методы (для каждого класса свой метод) другого класса.
PHP
1
2
3
4
5
6
7
8
9
class Classes{
    
    static private $Class1= array();
    
    static function Class1( $key = 'example' ){
        if(!isset(self::$Class1[$key]))
            self::$Class1[$key] = new Class1;
        return self::$Class1[$key];
    }
Все это мне не нравится. Хочется какой то однозначности по созданию экземпляров классов т.е. что бы нельзя было создавать не через капсулу. Что бы капсулы поддерживали конструкторы. Вообще я даже не знаю как выразиться, но такой вариант мне кажется убогим. Покажите кто как проектирует вообще...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2018, 19:12
Ответы с готовыми решениями:

Не могу определиться
Я хочу изучить хоть один язык для программирования на ПК, но не знаю какой. Платформа .NET с C# и...

Не могу определиться с 1с
Друзья, весь мозг сломал, никто ничего не говорит, как будто сговорились, помогите определиться с...

Не могу определиться
Ребят, нужна ваша помощь, помогите выбрать. Уже всех друзей опросил - счет примерно равный. Голубые...

Не могу определиться
Здравствуйте, в вузе сказали, что необходимо выбрать предметы из 4 блоков. То есть : 1)...

Не могу определиться!
Не могу определиться, что из этого выбрать? Что лучше, самсунг или асус? У друга...

6
Para bellum
Эксперт PHP
4154 / 3088 / 1000
Регистрация: 06.01.2011
Сообщений: 9,023
21.05.2018, 19:24 2
Цитата Сообщение от 53ifbb Посмотреть сообщение
что бы нельзя было создавать не через капсулу
Не получится так. Если фабрика может создать экземпляр класса, то и "вручную" его тоже можно создать.
0
tarasalk
1213 / 725 / 289
Регистрация: 13.06.2013
Сообщений: 2,550
21.05.2018, 20:31 3
Конструктор можно сделать приватным. и останется только "капсула".
Вообще похоже на паттерн синглотон, только вместо одного объекта тут массив объектов.
0
53ifbb
55 / 54 / 21
Регистрация: 01.03.2016
Сообщений: 570
21.05.2018, 22:22  [ТС] 4
tarasalk, мне в фабрике не нужно реализовывать одиночки, даже если это реализовать, все равно будет реален вызов вне фабрики как сказал Para bellum. Но да ладно с этим...
Мне нужен какой то фабричный метод с отложенным запуском, умеющий создавать любые доступные объекты с любым числом аргументов для конструктора этого объекта.
И все это можно было очень легко применять при написании кода.
Вот я ни как не могу сообразить((( сейчас есть только отложенный запуск которым очень легко пользоваться по ключу, но нет универсального метода, что очень нужно как минимум для расширений системы. А вот с кол-ов аргументов я даже не могу представить чЁ делать)))

Добавлено через 1 час 18 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static function & Use( $Class, $Key = 'noKey', $ReCreate = false ){
        if(!isset(self::$pool[$Key]) || $ReCreate)
            self::$pool[$Key] = new $Class;
        return self::$pool[$Key];
    }
 
 
//Петя использует в своем плагине:
Classes::Use('alien_class', 'first', true)->Init();
Classes::Use('alien_class', 'first')->GetAny();
//Вася в своем плагине:
Classes::Use('alien_class', 'first', true)->Init();
Classes::Use('alien_class', 'first')->Write('');
Classes::Use('alien_class', 'second', true)->Init();
Classes::Use('alien_class', 'second')->GetAny();
Без конструкторов в классах. Комментарии ?
0
tarasalk
1213 / 725 / 289
Регистрация: 13.06.2013
Сообщений: 2,550
21.05.2018, 23:07 5
Очень сомнительная штука.
1) Автокомплит не заработает.
2) Контроля нет. Петя создал себе класс, Вася его пересоздал со своими параметрами, Петя пытается использовать свой класс а получает класс Васи.
3) Хз чем это лучше чем например сервис контейнера из ларавел или хотя бы синглтона на массивах.

По поводу созданию классов с приватными конструкторами. Думаю до них можно достучаться через рефлексию.
С передачей аргументов может помочь функция func_num_args
0
53ifbb
55 / 54 / 21
Регистрация: 01.03.2016
Сообщений: 570
21.05.2018, 23:22  [ТС] 6
tarasalk, про пункт 2, типа сейчас подразумевается, что коды не пересекаются, но конечно же надо делать возможность пересечения. Просто в голову не лезет ни как адекватная реализация. Сейчас ни где не используется пространство имен, но оно будет однозначно очень скоро.
Дайте что то поадекватнее
0
Para bellum
Эксперт PHP
4154 / 3088 / 1000
Регистрация: 06.01.2011
Сообщений: 9,023
22.05.2018, 06:06 7
53ifbb, что-то явно не то придумываете. Чтобы понять, как такое примерно создаётся, посмотрите Pimple (его можно использовать в Вашем проекте, просто установите через Composer).

Добавлено через 5 минут
Цитата Сообщение от 53ifbb Посмотреть сообщение
создавать любые доступные объекты с любым числом аргументов для конструктора этого объекта
Списки аргументов переменной длины
0
22.05.2018, 06:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2018, 06:06

Не могу определиться
Остановился между двумя телефонами SonyEricsson Elm и Nokia X3. Помогите выбрать, какой будет...

Не могу определиться
Старый компьютер. Материнская плата: Asrock P55DE PRO Видеокарта: Ati Radeon 5850HD Процессор:...

Не могу определиться
Здравствуйте. Я выбираю себе ноутбук для веб-дизайна... Присмотрел 3 модели:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru