Есть несколько способов справиться с этим, и у каждого из них есть свои плюсы и минусы.
Первый способ - это сделать что-то, как вы предлагаете, и обработать разницу между «постоянными» методами и«непостоянные» методы по соглашению.Ruby использует аналогичный подход с методами, указывая «опасные» методы (т.е. те, которые изменяют объект, к которому они обращаются, или их аргументы), заканчивая имя метода восклицательным знаком (!
).В зависимости от вашей культуры разработки, такое соглашение может работать очень хорошо, а может и нет.Проблема, с которой я сталкиваюсь с подобными соглашениями, заключается в том, что это еще одна вещь, которую я должен помнить, ее трудно проверить на согласованность, и для кого-то новичка в кодовой базе менее очевидно, что соглашение существует.
Другой способПодход к проблеме состоит в том, чтобы использовать шаблон Разделение ответственности по запросам команд (CQRS).Идея здесь в том, что вместо того, чтобы иметь один Repository
для объекта домена, который заботится как о получении постоянных объектов, так и о сохранении новых или обновленных, вы разделяете эти две обязанности.В дополнение к тому, что гораздо яснее относительно того, какие методы сохраняются (вы используете классы из совершенно разных пространств имен), вы также отделяете чтение от записи, что упрощает настройку приложения для повышения производительности в будущем.
Некоторые могут утверждать, что в целях простого знания того, какие методы сохраняются, а какие нет, CQRS - это то же самое, что соглашение об именах, просто подняли уровень.Хотя это в некоторой степени верно, переместив соглашение на уровень пространства имен, а не на уровень имени метода, вы можете лучше отслеживать с помощью графиков зависимостей, если вы не согласны с тем, где происходит сохранение, и позволяет вамрефакторинг легче.