Чистая архитектура Net Core MVC без шаблона репозитория

Я пытаюсь создать приложение MVC в net core 2.1, используя пример приложения eshoponweb. Я читал, что в ядре Entity Framework нет большого преимущества от добавления уровня репозитория и прямого использования ef dbcontext. Как бы я сделал это в сценарии чистой архитектуры. В примере приложения контекст дБ находится на уровне инфраструктуры, а логика бизнес-сервисов - в ядре приложения. Я думал о перемещении любого из них, но тогда это не помешает разделению, которого стремится достичь чистая архитектура. https://github.com/dotnet-architecture/eShopOnWeb и https://www.thereformedprogrammer.net/is-the-repository-pattern-useful-with-entity-framework-core/


person JimmyShoe    schedule 13.09.2018    source источник
comment
Нет большого преимущества использовать репозиторий (или единицу работы) с EF, потому что он уже реализован (но без соглашений об именах). DbContext - это единица работы, а DbSet ‹T› - это общий репозиторий.   -  person Brad    schedule 14.09.2018
comment
Я согласен со всем, что Крис Пратт сказал ниже. Лично я считаю, что пример проекта eShopOnWeb действительно чрезмерно спроектирован и плох для обучения. Он создает интерфейс для каждого отдельного класса и связывает каждый класс как службу, а затем фактически не использует какие-либо инъекции зависимостей в своих тестах. Большинство его сервисов тривиальны и могли быть простыми ванильными классами, экземплярами которых были созданы напрямую, или статическими служебными методами, или чем-то еще.   -  person Joe Irby    schedule 21.12.2018


Ответы (1)


Я думаю, что многие разработчики зацикливаются на том, что вам нужны свои собственные слои. В луковичной архитектуре у вас обычно есть уровень «данных», обычно называемый DAL. Когда вы используете ORM, например EF, это ваш уровень данных. Другими словами, вместо отдельной библиотеки классов, которую вы создаете для работы с базой данных, EF является этой библиотекой, и поэтому вы бы использовали ее так же, как и свою собственную библиотеку DAL, если бы она у вас была.

Постарайтесь не зацикливаться на слоях и «чистой» архитектуре. По правде говоря, самая чистая архитектура - это единый проект. Только когда с этим все начинает становиться громоздким, имеет смысл разбивать «слои». Другими словами, создайте простейшую единицу функциональности, какую только сможете. Если задействована куча кода, вы обнаруживаете, что повторяете код, у вас слишком много зависимостей и т. Д., А затем начинаете ломать вещи как часть процесса рефакторинга. В конце концов, вы можете получить все причудливые слои и 100 различных библиотек классов или что-то еще, но глупо пытаться начинать с этого. Если вашему приложению что-то действительно не нужно, глупо это добавлять. Легко и просто.

Как бы то ни было, это, вероятно, одно из самых незамеченных преимуществ TDD или разработки, основанной на тестировании. Вы пишете тест, чтобы убедиться, что происходит что-то конкретное, что вы хотите, а затем вы пишете код, удовлетворяющий этому тесту. Важно отметить, что вы только пишете код, который удовлетворяет этому тесту. Это означает, что, естественно, вы начинаете с простого и переходите к сложности. Цикл рефакторинга старого подхода TDD «красный-зеленый» - это когда вы очищаете код, абстрагируете вещи там, где это необходимо, переносите логику в повторно используемые библиотеки и т. Д. Даже если вы не применяете весь подход к кодированию, основанный на тестировании, все равно очень полезно смотреть на разработку таким образом. Вы знаете, что вам нужно построить, поэтому создайте максимально простую вещь, технически удовлетворяющую этому требованию. Затем проведите рефакторинг. Создайте следующее требование и снова выполните рефакторинг. Позвольте вашему приложению естественным образом развиться до того, чем оно действительно нужно, вместо того, чтобы пытаться с самого начала утверждать какую-то архитектуру, шаблон или процесс.

person Chris Pratt    schedule 13.09.2018
comment
Это отличный совет. - person Kirk Larkin; 13.09.2018
comment
Приветствую вас за ваш вклад. Возьму на борт. - person JimmyShoe; 13.09.2018
comment
На данный момент это самая большая проблема в моей компании ... они думают, что мы исправим один способ, и около 70+ будут следовать ему вечно, что совершенно неверно ... они отказываются понимать, что оптимизация кода продолжается ... вы продолжите рефакторинг кода после того, как разработаете его ... для моей компании, как только вы напишете код, он будет готов ... вы больше не будете его трогать - person Dhaval; 04.06.2020
comment
Любая компания с такой философией обречена на провал или, по крайней мере, неуместность. Вещи меняются, и в наши дни, особенно в программном обеспечении, изменения происходят с невероятной скоростью. Ваш код должен постоянно развиваться, или вы просто накапливаете технический долг, и проценты по нему в конечном итоге вас потонут. - person Chris Pratt; 04.06.2020