1

我不知道这是否是最好的标题。如果我错了,请纠正我,伙计们。现在解释我在问什么。

我们有一家公司运送由多个供应商销售的产品。这些供应商都有不同的 POS(销售点)系统。大概有大约 5 种不同的 POS 系统。这意味着每个 POS 系统的每个数据库表都不同。我们与他们的数据库同步,POS 将数据存储到我们的服务器。所以,我在我们的 cakephp 应用程序中尝试做的是创建一个对象接口,然后创建单独的类(为每个 POS)实现接口以提取数据并集中它。我正在考虑将这些类放在 Vendor 目录中,然后使用配置告诉它在我的应用程序中使用哪些模型。这是解决方法还是打破 MVC 模式???

编辑:我将更详细地解释我必须使用的内容。目前,我们主要使用的 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'
     ]
];
4

1 回答 1

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 已经提供的自定义类。您只需要转换数据结构。

于 2014-09-04T12:00:14.477 回答