我使用的是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.
}
我的目标是使用相同的对象来创建和检索羊群。但是,在我的数据库中,我创建了几个"主"视图,这些视图将所有查找表连接在一起,并对数据执行任何可以在行级别执行的基本计算。在本例中,在我的羊群主视图中,我已经将integrators
表与flocks
连接起来,从而在视图中获得了integrator_name
列。members
和farms
表也是如此。我还发现了date_placed
和date_picked_up
之间的天数差异,这给了我一个名为total_time_in_facility
的专栏。在我当前版本的这个应用程序中,所有这些数据都简单地存储在一个数组中,并使用魔术方法(__get
)进行访问。因此,如果我想获得积分器名称,我只需使用$flock->integrator_name
。但是,如果我使用Flock
类来填充数据库,我不会传递积分器名称——我只会传递上面列出的值。
我的问题是——获得关于羊群的扩展数据的最佳方法是什么?我是否应该使用另一个类来处理此问题(如FlockDetails
)?我应该根本不使用这个主视图吗?在我看来,我不应该执行任何计算,而应该只是在类本身中执行这些计算吗?我的印象是,我应该只用一个类来描述一大群人。如果我要创建一个新的群体,我会使用这个类。如果我想在上检索,我会简单地使用工厂来填充它。但是,如果我使用工厂填充它,那么主视图中包含的其他详细信息呢?有人能帮我清理一下吗?谢谢
好吧,我可能有一个Flock类,它表示表"flocks"中的一行,还有FlockEx类,它通过添加在db中计算得到的字段来扩展Flock类。因此,当你想更新或添加一个新的羊群到数据库时,你可以使用flock类,当你检索羊群字段和计算的字段时,你会使用FlockEx。有道理吗?