1.接受不需要设置的自变量(参数:设置值)的处理的定义

我喜欢使用类和链方法来定义它。
在 Go 或 Nim 中,我认为它对应于将结构定义为接收器变量的函数。

例如,考虑在读取 CSV 的过程中更改分隔符或字符代码。
我将用 PHP(7.4 或更高版本)编写代码。
只定义接口(调用部分),没有具体的处理实现。

阅读器.php

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个参数都是必需的。因此,当任意设置值增加时,我认为使用类和链式方法更容易改变,调用也不会浪费。

这是调用代码。

阅读.php

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

相关文章: