Php 代理业务对象的关键部分?

Php 代理业务对象的关键部分?,php,orm,surrogate-key,Php,Orm,Surrogate Key,我有一个数据库表(mysql),表示企业级应用程序中的实体雇员。代理键在整个数据库中使用,因此每个员工记录都有一个标识员工的自动递增ID列。我在php中将员工建模为业务对象(BO),如下所示: class Employee { public $id; // surrogate key of database record public $firstName; public $user; public $posInCompany // associated

我有一个数据库表(mysql),表示企业级应用程序中的实体雇员。代理键在整个数据库中使用,因此每个员工记录都有一个标识员工的自动递增ID列。我在php中将员工建模为业务对象(BO),如下所示:

class Employee 
{
    public $id;    // surrogate key of database record
    public $firstName;
    public $user;
    public $posInCompany // associated EmployeePosition

    public function __construct($emplData)
    {
        $this->id = $emplData['id'];
        // ... init other properties
    }       
}
我想知道
$id
属性是否应该是该类的一部分?实际上,它表示数据库中的代理密钥,因此与存储相关。但我希望BOs不知道它们的存储/加载方式(逻辑与持久性分离)。BOs为我保留了业务逻辑,我希望在不与存储类型(数据库等)耦合的情况下使用它们。在我上面的类布局中,如果不提供
$id
,我永远无法实例化员工,因此我想这不是实现BO的正确方法

我想使用DAO模式来存储/加载员工。我是否应该仅在DAO关注点中使用
$id


此外,我还担心以后在我的应用程序中识别Employee对象,这将很好地与代理
$id
配合使用。
$user
属性对于数据库中的每个员工也是唯一的。也许我应该用这个属性来代替

我不知道我是否正确地理解了你。。但是,如果仅在您的类和其他类中使用的ID不应访问此ID,请使用private$ID而不是public$ID…不,我的问题是$ID是否是业务对象的一部分,考虑与存储分离,但也提供了一种在应用程序中识别员工的方法。-我希望我已经为mor许可进行了编辑。如果你在任何地方都不需要代理id,那么不要让它成为对象的一部分。看起来您可以从$user变量中获得唯一性,因此不需要在object中包含$id,无论对象是如何存储的,始终需要能够唯一地标识它们。这表明你应该在BO中保留ID。(顺便说一句,公共属性是非常危险的。我可以把任何东西都放在它们里面。你最好把它们变成非公共的,并实现getter/setter,这样可以防止有人将对象的道具设置为无效状态)但我也可以在应用程序中通过属性
$user
来识别它们。所以,也许我应该在DAO部分使用
$id
,在应用程序部分使用
$user
?嗯,但是没有其他独特属性的BOs呢?它们只能通过代理密钥识别,不是吗?是的,getter/setter更适合封装。