[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: организация классов
Страницы: 1, 2
hurt3
Всем, привет

есть набор классов что бы не устраивать халивар при обращении между ними был создан класс посредник
и теперь что бы получить какую-либо информацию от любого класса достаточно лишь вызвать функцию в классе посреднике.

это удобно т.к. если допустим у нас будет исключен 1 класс нет необходимости, везде менять код обращения и работы с ним, изменили участок в одном месте и все, но

Но возникли 2 проблемы

1)
допустим класс 1 собирается получить от класса 2 информацию, обращаясь через посредник, а класс 2 для решения указанной задачи обращается к классу 3 через посредник, который обращается к классу 1 опять через посредник =/ ...

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

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


2) вторая проблема возникает если 1 класс предоставляет информацию
а 2 класс ее обрабатывает и это должно происходить в цикле

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

вообщем вопрос как реализовать взаимодействие?
Эли4ка
Цитата
есть набор классов что бы не устраивать халивар при обращении между ними был создан класс посредник
и теперь что бы получить какую-либо информацию от любого класса достаточно лишь вызвать функцию в классе посреднике.

Вот тут сразу остановимся. Хочется увидеться код, как все это происходит.
Guest
Эля

class modul1{
// функции select обращения к бд

// функции insert, delete, update


}

class modul2{
// функции select обращения к бд

// функции insert, delete, update


}


class posrednik{

var $modul1 =false;

var $modul2 =false;

// функции обращения к классам


function getModul1(){
if($this->modul1 == false){
$this->modul1 = new modul1;
}
}



function getModul2(){
if($this->modul2 == false){
$this->modul2 = new modul2;
}
}

}


т.е. posrednik класс оболочка


Эли4ка
Я, конечно дико извиняюсь, но а зачем вам этот посредник? Пока по коду не вижу в этом необходимости. Какие задачи выполняет проект?
Michael
Цитата (hurt3 @ 9.01.2019 - 17:23)
есть набор классов что бы не устраивать халивар при обращении между ними был создан класс посредник

Общение между классами, чтобы избежать зависимости, организуются посредством интерфейсов

_____________
There never was a struggle in the soul of a good man that was not hard
Guest
Michael, ты говоришь о интерфейсах каких? Интерфейсе обращения к классу или о интерфейсе как о родительском классе для классов модулей?


Я, конечно дико извиняюсь, но а зачем вам этот посредник? Пока по коду не вижу в этом необходимости. Какие задачи выполняет проект?

ну скажем так проект это аналитическая платформа, и она постоянно растет модули представляют из себя собрание классов по сбору и обработке информации, усложняется функционал и возможности существующих модулей, появляются новые. Соответственно функционал меняется, и вызовы некоторых функций в ряде модулей уже становиться недоступен.
Michael
Цитата (Guest @ 10.01.2019 - 13:07)
Michael, ты говоришь о интерфейсах каких? Интерфейсе обращения к классу или о интерфейсе как о родительском классе для классов модулей?

Просто обычный интерфейс - interface
Зависимость объекта ставится не от другого объекта, а от интерфейса, что дает большую свободу.

Что там за модуля у тебя я не знаю.
Но по коду выглядит как будто ты пытаешься Service Locator переизобрести.

Сейчас в основном везде пытаются DI использовать.
Классу в конструкторе указываются его зависимости(интерфейсы), а DI уже по требованию создать объект проинжектит его нужными типами объектов.

_____________
There never was a struggle in the soul of a good man that was not hard
Guest
Michael, по описанию похоже на паттерн "абстрактная фабрика" дай пожалуйста ссылку на статью

пока что нашел https://habr.com/post/276593/

описание дается, где к интерфейсам идет обращение все также через единую точку но задействован паттерн "фасад"


Мишель, верно ли я понимаю, что в основе идеи лежит формирование структуры на основе интерфейсов для классов , в которых указаны функции для взаимодействия модулей друг с другом?


Момент еще том что, при использовании класс посредника легко размещать метки логирования и отчетности, один класс имеет все функции общения и при их вызове сохраняет информацию в журнал
Guest
Michael
я понял что за DI вот на этом и застрял в итоге получается, что DI превращается в Service Locator

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

если вызов модуля 2 происходит из DI(управляющий класс) и DI предоставляет информацию модулю 2
кто должен выполнять ее валидацию?

предположим, что должен модуль2, и если информация некорректная возвращает false управляющему модулю, а тот в свою очередь должен повторно запросить у модуля 1 правильные даныные, и вот здесь уже получается цикл и цикл этот должен быть размещен в DI - другими словами в DI формируется управляющая конструкция. Взаимодействие, контроль выполняния а следовательно и бизнес логика делегируются DI. И по логике DI должен

1) иметь информацию о всех классах и их взаимодействиях

2) функционал для валидации данных т.к. это позволит сократить время обработки информации

3) управлять данными и корректировать работу модулей

другими словами DI превращается в управляющую структуру ядро (((

А модули становятся не самостоятельными единицами делегировав функционал валидации и управления ядру.



Michael
Цитата (Guest @ 10.01.2019 - 14:15)
Michael   дай пожалуйста ссылку на статью
Цитата (Guest @ 10.01.2019 - 14:15)
Michael 
Мишель, верно ли я понимаю, что в основе идеи лежит формирование структуры на основе  интерфейсов для классов , в которых указаны функции для взаимодействия модулей друг с другом?

ну так это же базовый принцип, еще из Банды четырех : "программируйте в соостветствии с интерфейсом, а не с реализацией."

_____________
There never was a struggle in the soul of a good man that was not hard
Guest
Michael
забыл упомянуть, предположим у нас есть некая программа, с ядром и используемыми классами, дак вот при увеличении задач стоящих пред программой зачастую возникают задачи, которые требуют небольших решений но для их реализации необходимо реализовывать отдельный модуль. И очень велик соблазн разместить 3 строки кода в самом ядре.

допустим у нас есть система которая раз в 3 минуты обновляет данные полученные из вне. Соответственно система представлена модулями "сбора информации" с источника и модулем "корректной обработки и сохранения информации" в бд 2 задачи - два модуля 1 ядро, и вот возникает новая задача при старте работы этих модулей сохранять метку времени в отделенную таблицу. По логике необходим отдельный модуль, но из-за 1 запроса писать отдельный модуль кажется просто бредом как быть?
Michael
DI просто позволяет разрулить зависимости.
Валидациями надо отдельно заниматься, начинать с того что делать это в том классе чьи данные валидируются.

Цитата
По логике необходим отдельный модуль, но из-за 1 запроса писать отдельный модуль кажется просто бредом как быть?

такие вещи обычно делаются с помощью Событий и ИхСлушателей/Подписчиков.

Вы что фреймы никогда не смотрели?

_____________
There never was a struggle in the soul of a good man that was not hard
Guest
знаю фреймы в html в php не знаю что это.


НУ давайте еще помучаю вопросами, singleton можно использовать, как общий репозиторий данных, корректно ли его использовать в классах логирования?
Michael
Цитата (Guest @ 10.01.2019 - 14:57)
знаю фреймы в html в php не знаю что это.

Я о php фреймворках - Yii, Laravel и т.д.

Насчет синглтона классического через статику, то напрямую зависимость от него не делают, это плохо.

Но например в DI таком как у Yii, классу можно указать что он будет как синглтон, т.е. не его новые версии будут другим объектам подсовываться, а все время он один.

_____________
There never was a struggle in the soul of a good man that was not hard
Guest
Michael
мм ясно, спасибо
Быстрый ответ:

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