Ich denke, wenn Sie ein Programm schreiben, können Sie Allzweckfunktionen in Klassen und Methoden ausschneiden und implementieren.
Betrachten Sie beispielsweise den Prozess, bei dem mehrere angegebene Benutzer an einem bestimmten Ereignis teilnehmen.
Überprüfen Sie zunächst die Implementierung, wenn sich die gesamte Verarbeitung in einer Methode befindet. (Ich habe es in Ruby geschrieben, aber wenn Sie andere Programmiersprachen beherrschen, können Sie ein Gefühl dafür bekommen.)
def main(user_ids, event_id)
users = User.where(id: user_ids)
event = Event.find(event_id)
#Schließt teilnehmende Benutzer aus
target_users = users.reject {|user| user.events.ids.include?(event.id) }
#Teilnahme an der Veranstaltung
target_users.each do |user|
#Teilnahme an der Veranstaltung=>Datensatz zu EventUser hinzufügen
EventUser.create!(user: user, event: event)
end
end
Lassen Sie uns den Prozess der Teilnahme an Veranstaltungen als Methode aus den oben genannten herausschneiden. Dieses Mal habe ich dem Ereignismodell eine Methode hinzugefügt.
def main(user_ids, event_id)
users = User.where(id: user_ids)
event = Event.find(event_id)
#Schließt teilnehmende Benutzer aus
target_users = users.reject {|user| user.events.ids.include?(event.id) }
#Teilnahme an der Veranstaltung
event.join(target_users)
end
app/models/event.rb
def join(users)
users.each do |user|
#Teilnahme an der Veranstaltung=>Datensatz zu EventUser hinzufügen
EventUser.create!(user: user, event: event)
end
end
Wenn Sie den Vorgang des Beitritts zu einem Ereignis von einem anderen Ort aus ausführen möchten, können Sie es mit "event.join (users)" aufrufen.
Diese Implementierungsmethode weist jedoch einige Feinheiten auf. Der Punkt ist, dass der Anrufer nur die Benutzer übergeben darf, die teilnehmen können, mit Ausnahme der Benutzer, die bereits beigetreten sind.
In diesem Beispiel ist es für den Anrufer einfacher, Folgendes zu tun.
def main(user_ids, event_id)
users = User.where(id: user_ids)
event = Event.find(event_id)
#Teilnahme an der Veranstaltung
#Der Anrufer muss sich keine Sorgen machen, wenn Benutzer bereits beigetreten sind. OK, wenn Sie den Benutzer übergeben, der das Ziel sein kann
event.join(users)
end
app/models/event.rb
def join(users)
#Schließt teilnehmende Benutzer aus
target_users = users.reject {|user| user.events.ids.include?(event.id) }
target_users.each do |user|
#Teilnahme an der Veranstaltung=>Datensatz zu EventUser hinzufügen
EventUser.create!(user: user, event: event)
end
end
Bei einer solchen Implementierung kann der Anrufer den Zielbenutzer weitergeben, ohne sich Gedanken darüber machen zu müssen, ob er bereits beigetreten ist.
Wenn Sie in dieser Reihenfolge erklären, mag es natürlich erscheinen, die dritte zu implementieren, aber in Wirklichkeit sehen Sie oft die im zweiten Zustand implementierte.
Dies liegt daran, dass es kein Unbehagen gibt, selbst wenn die Methode allein als "eine Methode bezeichnet wird, mit der Benutzer an Ereignissen teilnehmen können". Der zweite verallgemeinerte Teil ist unten abgedruckt. Wie wäre es allein mit dieser Methode?
app/models/event.rb
def join(users)
users.each do |user|
#Teilnahme an der Veranstaltung=>Datensatz zu EventUser hinzufügen
EventUser.create!(user: user, event: event)
end
end
Wenn Sie zum ersten Mal eine generische Methode erstellen, haben Sie möglicherweise nur wenige (oder nur einen) Aufrufer. In diesem Fall dauert es nicht lange, bis der Anrufer oder der Angerufene überprüft werden. Daher ist es schwierig, den Aufwand zu spüren, alles beim Anrufer überprüfen zu müssen.
Und sobald es so implementiert ist, wird der vorhandene Teil kopiert, wenn der Prozess der Teilnahme an der Veranstaltung auf die gleiche Weise implementiert wird. In diesem Fall funktioniert die Dynamik von "Weil die vorhandene so ist", und anstatt sich zu ärgern, wird sie als selbstverständlich angesehen.
Ist es für den Benutzer einfach, allgemeine Funktionen zu implementieren? Seien wir uns dessen bewusst. Wenn der Benutzer verschiedene Einschränkungen berücksichtigen muss oder Prozesse ausgeführt werden müssen (Prozesse ohne Teilnehmer in diesem Beispiel), können diese Prozesse in Allzweckfunktionen integriert werden. Lassen Sie uns überlegen, ob es da ist.
Dies erleichtert nicht nur dem Benutzer, sondern verhindert auch Fehler wie Auslassungen.
Wenn Sie es für allgemeine Zwecke erstellen möchten, wird es auch verwendet. Wenn es schwierig zu verwenden ist, besteht eine hohe Wahrscheinlichkeit, dass nur die Person, die es implementiert hat, es verwenden kann (die Person, die es implementiert hat, kann es möglicherweise in einigen Monaten nicht verwenden). Denken wir an die Implementierung, die für Benutzer einfach zu bedienen und zu genießen ist! !!
Recommended Posts