Nie jestem pewien, czy ta metoda w mojej klasie narusza zasada jednej odpowiedzialności,SOLID - czy zasada jednej odpowiedzialności dotyczy metod w klasie?
public function save(Note $note)
{
if (!_id($note->getid())) {
$note->setid(idGenerate('note'));
$q = $this->db->insert($this->table)
->field('id', $note->getid(), 'id');
} else {
$q = $this->db->update($this->table)
->where('AND', 'id', '=', $note->getid(), 'id');
}
$q->field('title', $note->getTitle())
->field('content', $note->getContent());
$this->db->execute($q);
return $note;
}
Zasadniczo robi dwa zadania w metodzie - Włożyć lub aktualizacji.
Czy powinienem oddzielić na dwie metody zamiast stosować się do zasady jednej odpowiedzialności?
Ale SRP jest przeznaczony tylko dla klas , czyż nie? Czy dotyczy to metod wewnątrz klasy?
SRP -
klasa powinna mieć tylko jeden odpowiedzialność (tj tylko jeden potencjalną zmianę specyfikacji Oprogramowania powinny móc wpływać na specyfikację klasy)
EDYCJA:
Inna metoda notowania notatek (w tym wiele różnych rodzajów ofert), wyszukiwanie n Uwagi, etc ...
public function getBy(array $params = array())
{
$q = $this->db->select($this->table . ' n')
->field('title')
->field('content')
->field('creator', 'creator', 'id')
->field('created_on')
->field('updated_on');
if (isset($params['id'])) {
if (!is_array($params['id'])) {
$params['id'] = array($params['id']);
}
$q->where('AND', 'id', 'IN', $params['id'], 'id');
}
if (isset($params['user_id'])) {
if (!is_array($params['user_id'])) {
$params['user_id'] = array($params['user_id']);
}
# Handling of type of list: created/received
if (isset($params['type']) && $params['type'] == 'received') {
$q
->join(
'inner',
$this->table_share_link . ' s',
's.target_id = n.id AND s.target_type = \'note\''
)
->join(
'inner',
$this->table_share_link_permission . ' p',
'p.share_id = s.share_id'
)
# Is it useful to know the permission assigned?
->field('p.permission')
# We don't want get back own created note
->where('AND', 'n.creator', 'NOT IN', $params['user_id'], 'uuid');
;
$identity_id = $params['user_id'];
# Handling of group sharing
if (isset($params['user_group_id']) /*&& count($params['user_group_id'])*/) {
if (!is_array($params['user_group_id'])) {
$params['user_group_id'] = array($params['user_group_uuid']);
}
$identity_id = array_merge($identity_id, $params['user_group_id']);
}
$q->where('AND', 'p.identity_id', 'IN', $identity_id, 'id');
} else {
$q->where('AND', 'n.creator', 'IN', $params['user_id'], 'id');
}
}
# If string search by title
if (isset($params['find']) && $params['find']) {
$q->where('AND', 'n.title', 'LIKE', '%' . $params['find'] . '%');
}
# Handling of sorting
if (isset($params['order'])) {
if ($params['order'] == 'title') {
$orderStr = 'n.title';
} else {
$orderStr = 'n.updated_on';
}
if ($params['order'] == 'title') {
$orderStr = 'n.title';
} else {
$orderStr = 'n.updated_on';
}
$q->orderBy($orderStr);
} else {
// Default sorting
$q->orderBy('n.updated_on DESC');
}
if (isset($params['limit'])) {
$q->limit($params['limit'], isset($params['offset']) ? $params['offset'] : 0);
}
$res = $this->db->execute($q);
$notes = array();
while ($row = $res->fetchRow()) {
$notes[$row->uuid] = $this->fromRow($row);
}
return $notes;
}
dzięki. co z metodą w mojej edycji powyżej. służy na przykład do notowania notatek i notatek wyszukiwania w tym samym czasie. czy to jest w porządku, czy powinienem je rozdzielić? czy to narusza SRP? – laukok
Ta metoda jest odpowiedzialna za pobranie tablicy kryteriów wyszukiwania i zwrócenie listy uwag. To zawsze to samo. Nawet jeśli implementacja może być dość skomplikowana i mogłaby być refaktoryzowana na osobne metody czystości, SRP nie jest naruszony. SRP w pigułce oznacza, że powinieneś być w stanie opisać, co robi metoda/klasa/moduł w jednym krótkim zdaniu. Jak tylko będziesz musiał opisać to * to X robi foo, bar, baz, a także robi kawę *, to prawdopodobnie narusza SRP. – deceze
* "Przyjmuje argument X i zwraca wynik Y" * jest jednym obowiązkiem. Przykładem * zbyt wiele * może być: * "Klasa zarządza połączeniem z bazą danych i serializuje dane oraz renderuje szablon i buforuje odpowiedź" *. – deceze