Class 需要一些关于解决方案/类设计的见解吗
基本上我想要一门课,比如说“工作”,大致上是这样的Class 需要一些关于解决方案/类设计的见解吗,class,design-patterns,Class,Design Patterns,基本上我想要一门课,比如说“工作”,大致上是这样的 class Job { $jobId; $name; public function __construct($name) { $this->name = $name; } public function execute() { // excute some stuff here } public function setJobId() {
class Job {
$jobId;
$name;
public function __construct($name) {
$this->name = $name;
}
public function execute() {
// excute some stuff here
}
public function setJobId() {
$this->jobId = $this->generateId();
}
public function view() {
return $this->name;
}
// Other stuffs
}
这些要求将是:
客户机应该能够实例化这个类,并且可以执行$job=newjob()和$job->view()来获取作业名称。但是,如果客户端希望执行它,则需要设置一个ID。请注意,此ID只应设置一次。此外,客户机可能只是想检索作业名称,而不想执行它
洞察力?也许我不应该让客户实例化类才能得到它的名字? < p>我会考虑以下选项:
setJobId()
并在构造函数中分配作业标识符:
...
public function __construct($name) {
$this->name = $name;
$this->jobId = $this->generateId();
}
...
setJobId()
,并在执行中分配作业标识符
...
public function execute() {
$this->jobId = $this->generateId();
// execute some stuff here
}
...
setJobId()
不会重新分配id,尽管我可能会将其重命名为更直观的名称,如prepare()
:
execute()
中检查jobId
,如果未设置,则引发错误或调用setJobId()
-或其更性感的新版本prepare()
;^)那么
generateId()
方法呢?打电话什么的贵吗?有没有可能一个作业永远不会执行,因此不需要id?除非有理由不这样做,否则我认为应该在构造函数中执行行$this->jobId=$this->generateId()
。是的,客户端可能只是想要一些关于作业的信息,但不执行它。这并不昂贵,但似乎是多余的,因为我们无论如何都不会执行它,因此我们不需要唯一的作业标识符来检索其执行结果,等等。是的,将作业id生成放在构造函数中可以工作,但感觉不是一个好的设计。
...
public function prepare() {
if (is_null($this->jobId)) { // or however nullity is checked on PHP
$this->jobId = $this->generateId();
} else {
// do nothing or raise exception
// because I've just found out that PHP has exceptions
}
}
...