Cakephp 3.x Как настроить сторонние программы?

Не знаю, лучшее ли это название. Поправьте меня, если я ошибаюсь, друзья. Теперь поясню, о чем я спрашиваю.

У нас есть компания, которая отправляет товары, которые продаются несколькими поставщиками. Все эти поставщики имеют разные системы POS (Point of Sale). Вероятно, существует около 5 различных POS-систем. Это означает, что каждая из таблиц базы данных отличается для каждой POS-системы. Мы синхронизируемся с их базой данных, где POS хранит данные на нашем сервере. Итак, что я пытаюсь сделать в нашем приложении cakephp, так это создать объектный интерфейс, а затем создать отдельные классы (для каждой POS), которые реализуют интерфейс для извлечения данных и их централизации. Я думал сделать это, поместив эти классы в каталог Vendor, а затем используя конфигурацию, чтобы указать, какие модели использовать в моем приложении. Это способ сделать это или это нарушает шаблон MVC???

EDIT: я собираюсь более подробно объяснить, с чем мне приходится работать. Прямо сейчас есть две из 5 POS-систем, с которыми мы работаем в основном. После синхронизации с их базой данных у меня теперь есть следующие таблицы в моей базе данных.

[POS1] => [
   customers=>[
      'id', 'FIRSTNAME', 'LASTNAME'
   ],
   products=>[
      'id', 'TYPE', 'TITLE', 'PRICE'
   ],
   'orders'=>[
       'id', 'PRODUCT_ID' 
    ],
    'transactions'=>[
       'id', 'ORDER_ID', 'CUSTOMER_ID'
     ]
];
[POS2] => [
   customers=>[
      'id', 'name'
   ],
   products=>[
      'id', 'price'
  ],
  transactions=>[
       'id', 'order_id', 'customer_id'
     ]
];

person chrisShick    schedule 04.09.2014    source источник


Ответы (1)


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

Я бы поместил эти новые библиотеки в App/Lib или App/Pos, а затем реализовал фабричный шаблон и абстрактный класс, который реализует общие методы, которые они все имеют.

use App/Pos/PosSystem;
/* ... */
$Pos = PosSystem::get('SomeName');
$Pos->save($data);
$Pos->read('...');

Изменить:

То, что вам нужно, — это просто преобразование массива, которое превратит ваши данные POS в унифицированную структуру. Думаю, в CakePHP 3.0 есть несколько способов сделать это. Может быть, декоратор (сам еще не использовал их), пользовательский объект сущности или довольно классическое поведение.

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

person floriank    schedule 04.09.2014
comment
Я отредактировал заголовок, чтобы отразить версию cakephp, с которой я работаю. - person chrisShick; 04.09.2014
comment
Я также предоставил более подробную информацию о POS-системах. - person chrisShick; 04.09.2014
comment
Я обновил свой ответ, это довольно легко сделать, все, что вам нужно, это нормализовать структуру данных. - person floriank; 04.09.2014
comment
У меня несколько продавцов. Некоторые используют структуру pos1, а другие используют структуру pos2. Я настроил свою базу данных таким образом, что каждая таблица имеет прикрепленный к ней vendor_id, например, products_6. Шесть — номер поставщика 6. Я пытался погуглить, но ничего не нашел о том, как я могу динамически изменить имя таблицы торта на таблицу в базе данных. Или есть лучшее предложение, чем то, что я делаю? - person chrisShick; 04.09.2014