Репозитории DDD как одиночные элементы?

Обновление: мой оригинальный ответ был опубликован до того, как стало ясно, что myArray - это многомерный массив. Учитывая это, я согласен с Вечной, которая также правильно указала, что использование цикла for-each позволит вам получить само целое число вместо ссылки на него по индексу.

Исходный ответ: Похоже, что вы изменили что-то еще, когда преобразовали циклы for.

Выражение myArray [a] [b] было бы допустимым, если бы myArray был многомерным массивом. Проблема в том, что вы пытаетесь получить доступ к двумерному массиву, когда сам массив одномерный.

Если вы пытаетесь умножить записи в точках a и b, вам нужно сделать следующее:

p = p + myArray[a] * myArray[b];

или условно:

p += myArray[a] * myArray[b];
5
задан Jim G. 4 October 2009 в 03:23
поделиться

3 ответа

Я видел несколько способов сделать это.

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

Можно также заставить репозитории реализовать шаблон "одиночка". Я старался бы избегать этого, потому что одиночные элементы обычно используют статические методы. Это может сделать тестирование кода, который звонит в одиночные элементы более трудный. Если необходимо сделать вещи, этот путь затем удостоверяется, что Вы выделяете код, который называет одиночный элемент, и используйте "ручное" внедрение зависимости для введения одиночных элементов в классы, которые называют их. Это избавляется от части плотного соединения, которое Вы иначе получили бы.

Я видел некоторые примеры, где репозитории никогда не называют. Когда кто-то перемещается по графу объектов в модели и запрашивает объект, который не загружается, модель просто генерирует событие, и репозиторий реагирует на это событие. Таким образом, там не являются никакие вызовы в репозиторий, и он полностью отделяется из модели. Я havn't использовал эту архитектуру сам, но это кажется очень чистым.

2
ответ дан 14 December 2019 в 19:29
поделиться

Используйте свой контейнер внедрения зависимости для решения, как и где репозитории создаются.

При помощи

UserRepository.Instance.Find(userId);

Вы создаете барьер для тестирования.

Если Ваши репозитории передаются на службы с помощью Инжекции Конструктора, то можно также легко заменить их насмешками.

3
ответ дан 14 December 2019 в 19:29
поделиться

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

0
ответ дан 14 December 2019 в 19:29
поделиться
Другие вопросы по тегам:

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