Методы именования сервисов данных - PullRequest
1 голос
/ 01 сентября 2011

Когда вы работаете с ORM, который реализует шаблон UnitOfWork (сессия NHibernate, ObjectContext Entity Framework и т. Д.), Существует два типа методов служб данных: те, которые сохраняют / фиксируют изменения, и те, которые просто изменяют свойства модели.

Через некоторое время становится трудно поддерживать этот беспорядок: когда вы вызываете метод, вы не уверены, сохранит ли он изменения или нет (если вам не нужно делать это в некоторых внешних методах).

Как я могу решить эту проблему?Единственная идея, которую я имею, - это специальное наименование.Например, AddCustomer для метода сохранения и FillForAddCustomer для метода без сохранения.Есть другие идеи?

1 Ответ

1 голос
/ 09 сентября 2011

Есть несколько способов справиться с этим, и у каждого из них есть свои плюсы и минусы.

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

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

Некоторые могут утверждать, что в целях простого знания того, какие методы сохраняются, а какие нет, CQRS - это то же самое, что соглашение об именах, просто подняли уровень.Хотя это в некоторой степени верно, переместив соглашение на уровень пространства имен, а не на уровень имени метода, вы можете лучше отслеживать с помощью графиков зависимостей, если вы не согласны с тем, где происходит сохранение, и позволяет вамрефакторинг легче.

...