Question::__construct()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 22
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 10
nc 2
nop 8
dl 0
loc 22
rs 9.2
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php declare(strict_types=1);
2
3
namespace VSV\GVQ_API\Question\Models;
4
5
use Ramsey\Uuid\UuidInterface;
6
use VSV\GVQ_API\Common\ValueObjects\Language;
7
use VSV\GVQ_API\Common\ValueObjects\NotEmptyString;
8
use VSV\GVQ_API\Question\ValueObjects\Year;
9
10
class Question
11
{
12
    /**
13
     * @var UuidInterface
14
     */
15
    private $id;
16
17
    /**
18
     * @var Language
19
     */
20
    private $language;
21
22
    /**
23
     * @var Year
24
     */
25
    private $year;
26
27
    /**
28
     * @var Category
29
     */
30
    private $category;
31
32
    /**
33
     * @var NotEmptyString
34
     */
35
    private $text;
36
37
    /**
38
     * @var NotEmptyString
39
     */
40
    private $imageFileName;
41
42
    /**
43
     * @var Answers
44
     */
45
    private $answers;
46
47
    /**
48
     * @var NotEmptyString
49
     */
50
    private $feedback;
51
52
    /**
53
     * @var \DateTimeImmutable
54
     */
55
    private $archivedOn;
56
57
    /**
58
     * @param UuidInterface $id
59
     * @param Language $language
60
     * @param Year $year
61
     * @param Category $category
62
     * @param NotEmptyString $text
63
     * @param NotEmptyString $imageFileName
64
     * @param Answers $answers
65
     * @param NotEmptyString $feedback
66
     */
67
    public function __construct(
68
        UuidInterface $id,
69
        Language $language,
70
        Year $year,
71
        Category $category,
72
        NotEmptyString $text,
73
        NotEmptyString $imageFileName,
74
        Answers $answers,
75
        NotEmptyString $feedback
76
    ) {
77
        if (count($answers) < 2 || count($answers) > 3) {
78
            throw new \InvalidArgumentException('Amount of answers must be 2 or 3.');
79
        }
80
81
        $this->id = $id;
82
        $this->language = $language;
83
        $this->year = $year;
84
        $this->category = $category;
85
        $this->text = $text;
86
        $this->imageFileName = $imageFileName;
87
        $this->answers = $answers;
88
        $this->feedback = $feedback;
89
    }
90
91
    /**
92
     * @return UuidInterface
93
     */
94
    public function getId(): UuidInterface
95
    {
96
        return $this->id;
97
    }
98
99
    /**
100
     * @return Language
101
     */
102
    public function getLanguage(): Language
103
    {
104
        return $this->language;
105
    }
106
107
    /**
108
     * @return Year
109
     */
110
    public function getYear(): Year
111
    {
112
        return $this->year;
113
    }
114
115
    /**
116
     * @return Category
117
     */
118
    public function getCategory(): Category
119
    {
120
        return $this->category;
121
    }
122
123
    /**
124
     * @return NotEmptyString
125
     */
126
    public function getText(): NotEmptyString
127
    {
128
        return $this->text;
129
    }
130
131
    /**
132
     * @return NotEmptyString
133
     */
134
    public function getImageFileName(): NotEmptyString
135
    {
136
        return $this->imageFileName;
137
    }
138
139
    /**
140
     * @return Answers
141
     */
142
    public function getAnswers(): Answers
143
    {
144
        return $this->answers;
145
    }
146
147
    /**
148
     * @return NotEmptyString
149
     */
150
    public function getFeedback(): NotEmptyString
151
    {
152
        return $this->feedback;
153
    }
154
155
    /**
156
     * @param \DateTimeImmutable $archiveOn
157
     */
158
    public function archiveOn(\DateTimeImmutable $archiveOn): void
159
    {
160
        if ($this->archivedOn !== null) {
161
            throw new \DomainException(
162
                'The question with id: "'.$this->getId()->toString().'" was already archived.'
163
            );
164
        }
165
166
        $this->archivedOn = $archiveOn;
167
    }
168
169
    /**
170
     * @return bool
171
     */
172
    public function isArchived(): bool
173
    {
174
        return $this->archivedOn !== null;
175
    }
176
177
    /**
178
     * @return \DateTimeImmutable
179
     */
180
    public function getArchivedOn(): ?\DateTimeImmutable
181
    {
182
        return $this->archivedOn;
183
    }
184
}
185