Ich bin nicht sicher, ob diese Methode in meiner Klasse Einzel Verantwortung Prinzip verstößt,SOLID - gilt das Single-Responsibility-Prinzip für Methoden in einer Klasse?
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;
}
Grundsätzlich macht es zwei Jobs in einem Verfahren - einfügen oder aktualisieren.
Sollte ich getrennt es in zwei Methoden statt, um Single-Verantwortung-Prinzip zu erfüllen?
Aber SRP ist für Klassen nur gemeint, nicht wahr? Gilt es für die Methoden innerhalb einer Klasse?
SRP -
eine Klasse sollte nur eine einzige Verantwortung haben (dh nur ein Potentialänderung in der Spezifikation des Software sollte in der Lage sein, um die Spezifikation der Klasse beeinflussen)
EDIT:
Eine andere Methode zum Auflisten von Notizen (einschließlich vieler verschiedener Art von Auflistungen), Suche n otes, 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;
}
danke. Was ist mit der Methode in meiner Bearbeitung oben. Es dient zum Beispiel der Auflistung von Notizen und der Suche nach Notizen. Ist es in Ordnung das zu tun oder sollte ich sie trennen? verletzt es dann SRP? – laukok
Nun, diese Methode ist verantwortlich für eine Reihe von Suchkriterien und eine Liste von Notizen zurückgeben. Es ist immer das Gleiche. Selbst wenn die Implementierung ziemlich komplex ist und möglicherweise in separate Methoden für die Sauberkeit umgestaltet werden kann, wird die SRP nicht verletzt. SRP bedeutet in Kürze, dass Sie in der Lage sein sollten, zu beschreiben, was eine Methode/Klasse/Modul in einem kurzen Satz tut. Sobald Sie es mit * beschreiben müssen, macht dieses X foo, bar, baz und es macht auch Kaffee *, es verletzt wahrscheinlich die SRP. – deceze
* "Nimmt Argument X und gibt Ergebnis Y zurück" * ist eine Verantwortlichkeit. Ein Beispiel für * zu viel * wäre: * "Diese Klasse verwaltet die Datenbankverbindung und serialisiert die Daten und rendert die Vorlage und zwischenspeichert die Antwort" *. – deceze