1.接受不需要设置的自变量(参数:设置值)的处理的定义
我喜欢使用类和链方法来定义它。
在 Go 或 Nim 中,我认为它对应于将结构定义为接收器变量的函数。
例如,考虑在读取 CSV 的过程中更改分隔符或字符代码。
我将用 PHP(7.4 或更高版本)编写代码。
只定义接口(调用部分),没有具体的处理实现。
namespace Csv;
class Reader {
private string path;//ファイルパス
private string delimiter = ',';//区切文字
private string charset = 'utf-8';//
//必ず設定する引数はコンストラクタの引数で設定
public function __construct(string $path) {
$this->path = $path;
}
public function setDelimitery(string $value) : self {
$this->delimiter = $value;
return $this;//自らの参照を返し、チェーンメソッドにして、別のセッターを呼び出せるようにする。
}
public function setCharset(stirng $value) : self {
$this->charset = $value;
return $this;
}
public function getLines() : array {
//ファイルから行を読み込む処理
return $lines;
}
}
在我们的示例中,让 getLines 包含所有参数可能是一个好主意。
就个人而言,我认为拥有许多参数并定义并不总是设置的参数具有以下缺点。
・参数多时,函数兴趣多,处理复杂。
・如果你设置了一个并不总是使用的参数,调用者会受到影响,有时会导致错误。
我个人认为0-2个参数都是必需的。因此,当任意设置值增加时,我认为使用类和链式方法更容易改变,调用也不会浪费。
这是调用代码。
use CsvReader;
//文字コードのみ変更する場合。
$lines = (new Reader('任意のファイルパス'))->setCharset('shift-jis')->getLines();
foreach($lines as $line {
echo $line;
}
//全く変更をしない場合
$lines = (new Reader('任意のファイルパス'))->getLines();
如上所述,根据是否需要设置值,可以根据情况调用或不调用该方法。
始终执行的进程的参数设置未定义。
我认为这是更清晰的执行和更强大的改变。
曾几何时,在某个站点,有一个方法需要10多个参数,我经历了改变它是多么困难。
2.简单的建造者模式
我认为上述方法在设计模式方面接近于建造者模式。
但是,由于没有使用接口进行抽象,严格来说,它可能与构建器模式略有不同。
不仅仅是建造者模式,许多设计模式在设计时都考虑到了“抽象”。
我认为最好只提取设计模式的精髓并创建一个易于适应变化的设计。
3.在与抽象不同的领域中使用类
最近,由于反对面向对象,已经不再使用类,有些人可能会尝试将所有东西都定义为函数。但是,如您所见,增加函数中的参数数量在可读性方面存在缺点,例如难以阅读和难以调用。
它还经常导致程序修改出现问题。
我认为对面向对象的强烈反对源于抽象设计导致难以理解的事实。
但这不一定与使用类相同。
我认为,正如我们在这里所看到的,类有利于在处理级别分离关注点并定义跨类的复杂处理。
当然,在 Go、Rust、Nim 等中,您可以使用结构体而不是类来定义类似的东西。
我认为可以通过简单地定义和调用程序来避免这个问题。我发现类是一种有用的语法,它有助于简化事情,而不是增加不必要的混乱。
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308628741.html