2014-09-04 51 views
1

我不知道这是否是最好的标题。如果我错了,请纠正我,伙计们。现在解释我在问什么。Cakephp 3.x如何与第三方建立?

我们有一家公司出售多个供应商销售的产品。这些供应商都有不同的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' 
    ] 
]; 

回答

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已经提供的范围之内。你只需要转换数据结构。

+0

我编辑了标题以反映我正在使用的cakephp版本。 – chrisShick 2014-09-04 12:08:31

+0

我也提供了POS系统的更多细节。 – chrisShick 2014-09-04 12:23:15

+0

我已经更新了我的答案,这很容易做,所有你想要的是规范化数据结构。 – burzum 2014-09-04 14:29:22