PHP的类设计

因为找到了以前在研讨会上学到的内容的备忘录,所以打算复习一下。
由于是相当久远的事情,所以解释可能会有错误。
(特别是ValueObject以下部分)

素材

创建询问/咨询表格。

班级的角色

班级的作用有以下两点。

1. 数据的存储

在类中定义的属性

public $name

通过引入 “…” 的方式,可以明确地指示需要什么样的项目,与数组不同。
换句话说,可以确定数据储存的规范。

比如,以下是一个User类的例子。

class User {
    public $name;
    public $age;
    public $company;
}

在这个班级中需要 $name $age $company的项目。

2. 处理模块化

有时候,我们会将处理模块化为一个类,诸如验证(バリデート)等。在这种情况下,关键是在创建类时通过注释等必须写明「这个类是用来做什么」。

当你创建了将处理模块化的类时。

$contact = new User //User:クラス名

通过创建类的实例,可以实现的方法变得非常方便,可以通过实例调用。

将课堂外部化

只需要一个选项,将以下内容进行中国本土化的释义:
据说这里被称为”将类外部化”。

return $contract->validate();

一旦能够通过”で呼び出せるようになったところ”,这只是稍微进行了一些外部化。

创建班级的要点

在中文中改述如下:
1个类1个功能是至关重要的原则。
例如,如果您想要执行以下操作,

    • リクエストデータをとってくる

 

    • バリデーションをする

 

    • セッションに突っ込む

 

    DBに突っ込む

让一个类负责处理四个事务是没有意义的。

在创建一个班级时的重要概念

    • 1クラス1責務

 

    IPO

重视这两点非常重要。
将班级投射到IPO中,可以得到以下结果。

    • I:Input…引数

 

    • P:Process…1クラス1責務

 

    O:Output…戻り値、例外

返回值的重要性

不要问「要做什么」,而是最重要的是「要做什么并回应什么」。
在修改反馈的保守时常常会发生,因此应该从一开始就进行文档化。

在PHP7中,可以使用返回值的类型指定。

validate():bool

在方法之后加上: 类型,可以指定返回的类型,所以应积极地使用。

返回值的验证

在验证的情况下,不仅返回“OK”或者“NG”,还要保证能够输出错误信息。
然而,需要注意的是,如果将“把错误信息返回给会话”这样的内容放在验证类中进行编写,会导致类的目的偏离。

创建一个验证类,专注于创建验证对象,并采取让接收方自由处理的态度是最好的解决方案。可以创建一个Service类,在其中将数据保存到数据库中。

控制器的作用

return view する
リダイレクトする
etc…

正如所说,控制器的角色是确保正确处理请求。

顺便说一下,如果在控制器内使用session,就无法在用于调试的artisan命令中使用,所以要注意。(因为session只能通过HTTP使用)

创建服务的地方 (Chuangjian fuwu de didian)

在Laravel中,创建服务通常将其放在app下。

价值对象

因为只是接收验证对象本身的话,感觉有点不方便,所以建议创建一个称为Contact类的ValueObject(以下简称VO)。
通过创建VO,与数组不同的是,“查看这里会明确了解到会有哪些项目”变得确凿无疑。

$contact = new Contact();
$contact->name = $data["name"]; //安全性が保障されている

状态保持/无状态哪一个更理想?

也许可以将同时具有属性和方法的类称为“状态类”。这样一来,在查看该类时会很方便,但如果它们相互依赖(属性和方法?)并且写错了处理时,会变得非常困难。

因此,在班级中互不依赖的「无状态」是理想的。
虽然类可以具有状态和处理的功能,但如果这样做会增加复杂性和依赖性,所以应该避免。

如果给出一个没有状态的类的例子,那就是Laravel的Eloquent。
不应该自己创建Eloquent。

总结

创建班级时

    • 処理をするためのクラスか

 

    データを保持するためのクラスか

让我们开始思考。

广告
将在 10 秒后关闭
bannerAds