Como sabemos, o SRP declara que toda classe deve ter responsabilidade única e essa responsabilidade deve ser totalmente encapsulada pela classe.
Mas setters e getters cumprem outra responsabilidade - eles fazem acesso à propriedade de classe abstrata (dados).
se Setters e getters fazem acesso à propriedade de classe abstrata, eles servem outra responsabilidade .
Então, se eu tenho algo assim,
class Config
{
private location;
public function write(array $data)
{
....
}
public function read($key)
{
...
}
public function exists($key)
{
...
}
public function delete($key)
{
...
}
// Below comes property abstraction
// Here I doubt - I CANNOT USE this class without them
// but they seem to break the SRP at the same time!?
public function setFileLocation($location)
{
$this->location = $location;
}
public function getFileLocation()
{
return $this->location;
}
public function setConfigArray(...)
{
...
}
public function getConfigArray()
{
...
}
}
Eu quebro o SRP. O problema é que essa é a única maneira de existir a classe.
Então a questão é:
Na minha situação, é quase impossível evitar métodos setFileLocation()
e getFileLocation()
métodos CRUD.
Portanto, se combinando métodos CRUD com abstração de acesso a dados eu quebro o SRP,
Existe alguma maneira de aderir ao SRP e manter o conceito comum da classe Config (operações CRUD) ao mesmo tempo?