Сколько логики я должен поместить свои методы репозитория при использовании шаблона репозитория?

Вы не можете использовать Файл, так как этот файл не существует независимо в файловой системе. Вместо этого вам нужен getResourceAsStream (), например, так:

...
InputStream in = getClass().getResourceAsStream("/1.txt");
BufferedReader input = new BufferedReader(new InputStreamReader(in));
...
9
задан Charlie Bear 10 June 2009 в 17:01
поделиться

5 ответов

Определите, где вы хотите использовать метод Register, возможно, в классе UserServices. Вы можете делегировать создание объекта UserFactory. В методе CreateNewUser () установите значения по умолчанию для пользователя и коллекции групп. Затем вызовите UserRepository.Save (newUser) для сохранения данных.

// UserServices class
public void Register(User newUser)
{
  // add custom registration stuff.
  _userRepository.Save(newUser);
}

// Application code
User user = UserFactory.CreateNewUser();
_userServices.Register(user);

// UserFactory
public User CreateNewUser()
{
  // all new user, group creation
}
3
ответ дан 4 December 2019 в 15:25
поделиться

Лично я сохраняю шаблон репозитория в качестве замены sprocs. Таким образом, в моем репозитории будут такие методы, как getById (int id) , save () , add (DomainObject obj) и т. Д.

На бизнес-уровне, У меня будет userManager.registerUser (строковое имя пользователя, / * параметры и т. Д. * /). Это создаст объект домена. Этот метод просто вызывает метод add () на уровне данных.

Короче говоря, бизнес-уровень - это бизнес-y, а уровень данных - это данные-y.

6
ответ дан 4 December 2019 в 15:25
поделиться

Какова ваша мотивация в первую очередь использовать шаблон репозитория? Обычно репозиторий - это абстракция логики сохранения объекта. Он извлекает элементы (обычно) из базы данных, а также обрабатывает обновления, вставки и удаления.

Если бы вы писали тест для проверки некоторой логики и не хотели попадать в базу данных, какие объекты вам пришлось бы имитировать? Обычно репозиторий.

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

3
ответ дан 4 December 2019 в 15:25
поделиться

В вашем примере кода я бы назвал метод Register операцией службы. Как операция службы, она будет принадлежать службе или бизнес-компоненту, а не репозиторию. По словам Эванса (известного DDD), репозиторий представляет собой подобный коллекции интерфейс для сущностей, хранящихся в вашей базе данных. Общая идея заключается в том, что вы предоставляете базовый доступ к своим сущностям в стиле CRUD через репозиторий, чтобы абстрагировать остальную часть вашего кода от деталей доступа к данным более низкого уровня, таких как инструмент ORM.

1
ответ дан 4 December 2019 в 15:25
поделиться

Я вижу две потенциальные проблемы "неправильности" (поскольку вы на самом деле не указали, что, по вашему мнению, с ними было не так).

  1. Если проблема связана с сохранением группы при регистрации пользователя метод или сохранение пользователя в методах группы, то вы должны разделить их на разные методы. (т.е. Register () вызовет RegisterGroup () или GetGroup ()

  2. . Если проблема связана с сохранением вещей до того, как пользователь действительно будет готов к концептуальному сохранению вещей, то отслеживайте, что они хотели добавить, и подождите, пока не появится общее " save "вызывается перед помещением какой-либо информации в хранилище.

0
ответ дан 4 December 2019 в 15:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: