Максим Ворожцов, изначально у нас идёт требование, а потом уже мы его реализуем.
У нас может и без событий все реализовано на уровне контроллера. Зависит от задачи. Событие - это больше взаимодействие с чем-то внешним, а если все в рамках одного модуля, я бы события не использовал.
Если это Model, которая Entity, то она не должна определять CRUD, так как для этого есть репозиторий.
Если это Model, которая Active Record, то с ней работают в контроллере, если есть какая-то логика, а не просто CRUD, то в сервисах.
Например, для второго варианта:
getDeletedUserRatingBy...
Вместо этого мы пишем:
$models = Rating::findAll (['user_id' => $userId]);
foreach ($models as $model) $model->delete();
deleteAll () тоже можно. Все зависит от задачи.
Но вроде выглядит странно, по идее, все рейтинги пользователя нужно удалять при удалении самого пользователя, что на много правильнее делать на уровне внешнего ключа в базе данных:
ON DELETE CASCADE.
"Гибче" - дурацкое слово, от которого пора отказываться. Не так много проектов, которые должны быть гибкими, что прямо все будет меняться.
"Качественнее" - в ТЗ будут потеряешься критерии, поэтому, не проблема.
Veritas23, ", сколько будет разработка аналога ..."
Я надеюсь, что Вы уже поняли, что написали глупость. Смысл того, что Вам написал xmoonlight, что у Вас есть четкое понимание что Вам нужен за форум, какие задачи он будет решать для Вас, для пользователя и т.д.
Вот потом окажется, что критично на две недели работы, потом хотелок ещё на две-четыре, а остальное вообще не нужно.
А вот дописывать что-то в процессе работы для чего-то написанного под Вас всегда будет значительно дешевле, чем для коробочных решений.
Но ещё момент важный, если есть готовое решение, которое Вас полностью устраивает, то лучше брать его.
Поэтому, если Вы сами не разбираетесь и это имеет коммерческую ценность - обратитесь к специалистам, чтобы они помогли с выбором для Вашей конкретной ситуации.
Если это для себя, берите бесплатный, потом со временем разберётесь, возможно следующий уже закажите такой, как нужен.
svladys, этот вопрос звучит "как вбить гвоздь шуруповёртом".
"как добавить два одинаковых объекта в сет? Как лучше это сделать?"
Лучше даже не думать как это сделать!
"Как можно сделать сет, который добавляет два одинаковых объекта?"
Такой Set называется Hashtable (он же Map, Dictionary или Array в PHP), дальше от задачи может быть List ну или еще что-то.
Привести пример в виде продукта которой создан для того, чтобы покрывать все возможные кейсы.
Там скорее Вы в букве ошиблись, речь идёт о 50 или 500 млн, если не больше, так как 50 или 500 тысяч - это сделать что-то для Вас на их основе.
Но вопрос в том, что 90% функционала будет не нужно каждому конкретному пользователю.