Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> согласование с MVC, классификация конструкции
Ron  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 24 дня
Карма: 13




Всех приветствую!

Появилась идея создать универсальный класс для работы с платежной системой. Проблема только в "обвесе" и логировании действий в БД. Таблицы от проекта к проекту могут варьироваться и не хочется делать жесткую связку со структурой и типом хранилища.

Придумал вот такое решение:


class paysystem
{
protected $client;

public function __construct($clientobj)
{
if($clientobj instanceof clientiface)
{
$this->client = $clientobj;
}
else
{
throw new Exception('Error... Must be implementation of clientiface');
}
}


public function sendpay($param)
{
//Sending some data here
$this->client->logging('Message');
}

public function verifyorder()
{
$orderinfo = $this->client->getproductinfo($id);
//.... many code rows....
}
}


interface clientiface
{
/* @var $message string - logging message
* @return bool - status of operation
*/

public function logging($message);

/* @var $id int - product id
* @return array('product_name'=>string, 'product_amount'=>float)
*/

public function getproductinfo($id);
}


class client implements clientiface
{
public function logging($msg)
{
//$this->db->query('INSERT...');
return true;
}

public function getproductinfo($id)
{
//$a = $this->db->query('SELECT...');
return array('product_name'=>$a['product'], ...);
}

}



Как все это дело упаковать в соответствии с парадигмой MVC? Куда положить интерфейс? Где инициализировать нужные объекты?



--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11783
Пользователь №: 23195
На форуме: 6 лет, 4 месяца, 9 дней
Карма: 428

Трезвый :
7 лет, 3 месяца, 9 дней


    public function __construct(clientiface $clientobj)
{
$this->client = $clientobj;
}


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25980
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 18 дней
Карма: 725

Не курю:
1 год, 2 месяца, 5 дней


а интерфейс тебе в данном случае зачем?

а) чтобы был
б) я могу забыть что может/должен содержать класс
в) что дополнить картину парадигмы ООП
г) ну для чего то же они нужны


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 24 дня
Карма: 13




Invis1ble, я думал так проверяется принадлежность объекта к конечному классу. Оказывается можно указать имя любого из родителей? Я такого не знал.

Цитата (Игорь_Vasinsky @ 27.11.2015 - 21:34)
а интерфейс тебе в данном случае зачем?

Интерфейс для того, чтобы отвязать обвес от класса взаимодействия с платежной системой. Да, скорее для того, чтобы не забыть реализовать необходимые методы. Этот интерфейс предполагается таскать вместе с paysystem. Ну такое, своего рода, микро API чтобы получилось. Так что скорее б) чем всё остальное.

И да, насколько я могу судить, интерфейси именно для подобных задач и строились. Так что здесь кроется и некоторый смысл пункта г). wink.gif

P.s. Задумка, разумеется, более сложная. Здесь чисто прототип. В рабочей версии будет 5-6 методов в интерфейсе. И в каждом проекте скорее всего своя реализация client. Так что без интерфейса никак. =)


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 24 дня
Карма: 13




Ну дык как эти потуги разложить по MVC? Шаблон creator гласит нам о том, чтобы объекты создавались там, где будут использоваться. Если paysystem это модель, то согласно creator - client должен быть создан в ней. Но client тоже получается модель. В MVC нельзя вызывать модели друг из друга. И вообще куда девать интерфейс?

Вопрос...




--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 10 месяцев, 29 дней
Карма: 40




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


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 24 дня
Карма: 13




Цитата (chee @ 27.11.2015 - 22:26)
а у тебя тут задача уровня - бизнесс логики;

И что это означает?

Цитата (chee @ 27.11.2015 - 22:26)
какие функции ты возлагаешь на платежную систему

Функции общения с API предлагаемого сервиса. Не привязанные к проекту ничем без реализации clientiface.

Цитата (chee @ 27.11.2015 - 22:26)
не понятно должна ли платежная система подменяться другой в случаи надобности

Разумеется. Точно так же как и клиент.

Цитата (chee @ 27.11.2015 - 22:26)
сначала попробуй хотя бы немного очертить план выполнения своих работ, а потом уже за код хватайся.

Это прототип. В виде кода потому, что не владею UML. Цель выделить общую часть работы с внешними сервисами в отдельную структуру/библиотеку. Чтобы с каждым последующим проектом не выковыривать общие части из логики проекта-донора.



--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25980
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 18 дней
Карма: 725

Не курю:
1 год, 2 месяца, 5 дней


Цитата
Так что здесь кроется и некоторый смысл пункта г).

я научился писать интерфейсы - я буду писать интерфейсы.

Цитата
Шаблон creator гласит нам о том, чтобы объекты создавались там, где будут использоваться.

как сказал не давно twin - *(не дословно) мода на паттерны - это болезнь.

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

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


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


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 25980
Пользователь №: 21350
На форуме: 6 лет, 8 месяцев, 18 дней
Карма: 725

Не курю:
1 год, 2 месяца, 5 дней


я так то мысли в кучку собираю с трудом. а тут выпимши ещё.


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 24 дня
Карма: 13




Цитата (Игорь_Vasinsky @ 27.11.2015 - 23:06)
класс, не контроллер, не модель. просто библиотека.

Хммм... Тогда client это и есть модель. А интерфейс куда девать? =) Фишка в чем, почему я настаиваю на интерфейсе. В классе client скорее всего будут не только методы касающиеся оплаты. Поэтому когда начнешь тащить работу с кассой в другой проект, возникнут тут же вопросы что удалять, а что удалять нельзя. Так будет подсказочка, причем если лишнего порезал, то не запустится. Тут бабки, надо контролировать целостность процесса самым жесточайшим образом.

Что до шаблонов: я их только начал изучать. GRASP, GoF, SOLID... Хочется их внедрить в свой велосипед посмотреть удобно/не удобно. Мне кажется с интерфейсом будет как раз удобно, хотя могу ошибаться, у меня опыта еще не так много в разработке.

Вообще, слышал такое мнение, что интерфейсы желательно делать ко всем классам. Ну это как из той же серии, что и холивар на счет геттеров/сеттеров. Как говорится, редко, но метко! Создать интерфейс из класса с помощью IDE - дело 1 минуты. А времени потом может сэкономить часа 2. Особенно когда наглухо проект забудешь, а тут тебе РАЗ и интерфейсики в качестве подсказки. А если еще и пхпдоком описаны, как положено, то и вовсе красота! )))


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 10 месяцев, 29 дней
Карма: 40




Цитата (Ron @ 27.11.2015 - 22:35)
Цель выделить общую часть работы с внешними сервисами в отдельную структуру/библиотеку.

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

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


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1042
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 24 дня
Карма: 13




chee, для себя я уже всё решил, мне нужна лишь подсказка по способу прикручивания конструкции согласно MVC. Я считаю, что описанная структура будет удобной в использовании.

Вот только нигде не слышал куда складывают обычно интерфейсы? Для классов положено создавать отдельные файлы, которые должны содержать единственный класс и называться точно так же.





--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса