OOP将类拆分为创建和使用

时间:2013-05-30 20:46:38

标签: oop design-patterns constructor

如果重要的话,我正在使用PHP,并且我使用名为Product的类跟踪产品。 构造函数接受一个参数,该参数是产品的id。然后构造函数转到数据库并获取产品的所有信息,并设置该实例的所有属性。完成所有操作后,用户可以调用save()函数,新信息将更新数据库中的产品

如果产品的id在构造函数中设置为零,那么产品类就会理解这是一个新产品,并且不会获得任何变量。它允许您设置所有变量并验证它们。然后,当您调用save()函数时,它会创建产品并将产品的ID设置为为数据库中的行指定的新ID。

我面临的问题是,如果正在创建产品并且由于没有ID而尚未保存,则无法调用某些功能。因此,每当调用某些函数时,我必须检查该ID> 0.

我想知道将类拆分为仅用于创建的类和使用现有产品的类(例如Product和CreateProduct)是否是个好主意。这样做的好处是,Product类始终可以假设产品已经创建,因此我不必检查它,并且可以将所有验证方法移动到单独的类中并进行更好的管理。

只是想听听一些意见和建议。 谢谢, 亚历克斯

1 个答案:

答案 0 :(得分:1)

简而言之,我相信。听起来一般行为听起来像未保存产品的候选者是产品的子类,但这在很大程度上取决于产品是否经常在执行脚本时从保存转移到未保存。在这种情况下,您可以通过始终让$product->save()返回正确的对象实例来解决此问题。

您通常也可以从这种模式中受益,因为将来如果添加某种Product :: find($ id)方法,您可以根据从数据库加载的数据返回更具体的子类。 ,或者在0的情况下,返回CreateProduct

我是学校,通过数据库ID初始化一个类通常是一个尴尬的做法,同时为可能具体的东西创建分支逻辑。 “id是否存在?如果id不存在,我会抛出异常吗?如果它不存在,我只将id设置为null吗?”