我使用的是PHP 5.4。我正在尝试使我的应用程序更加实体化。我目前正在浏览我的对象,并确保他们遵循SRP。我坚持如何处理用属性填充我的对象,特别是"扩展"对象的属性。让我更好地解释一下。
我有一个名为Flock
的班级(是的,一群鸡 - 我在农业中)。它由数据库中flocks
表中的多个属性组成:id
,member_id
,integrator_id
,date_placed
,date_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
列。 members
和farms
表也是如此。我还发现date_placed
和date_picked_up
之间的天数差异给了我一个名为total_time_in_facility
的列。在我当前版本的应用程序中,所有这些数据都只是存储在一个数组中,并使用魔术方法(__get
)进行访问。因此,如果我想获得积分器名称,我只需使用$flock->integrator_name
。但是,如果我使用我的Flock
类来填充数据库,我就不会传递积分器名称 - 我只是传递上面列出的值。
我的问题是 - 获取有关鸡群的扩展数据的最佳方法是什么?我应该使用另一个类来处理这个问题(比如FlockDetails
)吗?我根本不应该使用这个主视图吗?我不应该在我的视图中执行任何计算,而应该只是在类中执行这些计算吗?我的印象是我应该只使用一个班级来描述一群人。如果我要创建一个新的群,我会使用这个类。如果我想要检索,我只需使用工厂填充它。但是,如果我使用工厂填充它,那么我的主视图中包含的其他详细信息呢?任何人都可以帮我解决这个问题吗?谢谢!
答案 0 :(得分:1)
好吧,我可能有一个类Flock代表表“flocks”中的单行和类FlockEx,它通过添加你在db中计算得到的字段来扩展类Flock。因此,当您想要更新或向db添加新的flock时,使用Flock类,当您使用FlockEx检索flock字段和计算的字段时。有意义吗?