使用从数据库中提取的属性填充对象的最佳方法

时间:2014-10-28 19:17:25

标签: php solid-principles single-responsibility-principle

我使用的是PHP 5.4。我正在尝试使我的应用程序更加实体化。我目前正在浏览我的对象,并确保他们遵循SRP。我坚持如何处理用属性填充我的对象,特别是"扩展"对象的属性。让我更好地解释一下。

我有一个名为Flock的班级(是的,一群鸡 - 我在农业中)。它由数据库中flocks表中的多个属性组成:idmember_idintegrator_iddate_placeddate_picked_up等:

<?php
class Flock
{
    private $id;
    private $member_id;
    private $farm_id;
    private $integrator_id;
    private $comments;
    private $production_sq_ft;
    private $number_of_houses;
    private $avg_effective_age_of_houses;
    private $date_placed;
    private $date_picked_up;
    private $head_started;
    private $head_picked_up;
    private $pounds_picked_up;
    private $pounds_sold;
    private $base_rate;
    private $performance_rate;
    private $fuel_rate;
    private $other_rate;
    private $feed_pounds_consumed;

    public function __construct() {}

    //Then a bunch of getters and setters.
}

我的目标是使用相同的对象来创建和检索flock。但是,在我的数据库中,我创建了几个&#34; master&#34; views - 将所有查找表连接在一起的视图,并对可在行级别执行的数据执行任何基本计算。在此示例中,在我的鸡群主视图中,我已加入integrators表,我的flocks在我的视图中为我提供了integrator_name列。 membersfarms表也是如此。我还发现date_placeddate_picked_up之间的天数差异给了我一个名为total_time_in_facility的列。在我当前版本的应用程序中,所有这些数据都只是存储在一个数组中,并使用魔术方法(__get)进行访问。因此,如果我想获得积分器名称,我只需使用$flock->integrator_name。但是,如果我使用我的Flock类来填充数据库,我就不会传递积分器名称 - 我只是传递上面列出的值。

我的问题是 - 获取有关鸡群的扩展数据的最佳方法是什么?我应该使用另一个类来处理这个问题(比如FlockDetails)吗?我根本不应该使用这个主视图吗?我不应该在我的视图中执行任何计算,而应该只是在类中执行这些计算吗?我的印象是我应该只使用一个班级来描述一群人。如果我要创建一个新的群,我会使用这个类。如果我想要检索,我只需使用工厂填充它。但是,如果我使用工厂填充它,那么我的主视图中包含的其他详细信息呢?任何人都可以帮我解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:1)

好吧,我可能有一个类Flock代表表“flocks”中的单行和类FlockEx,它通过添加你在db中计算得到的字段来扩展类Flock。因此,当您想要更新或向db添加新的flock时,使用Flock类,当您使用FlockEx检索flock字段和计算的字段时。有意义吗?