У нас в настоящее время относительно устаревшая база кода с использованием EntitySpaces (не имеет особого значения, но это ORM, что было приятно использовать в те дни , но с моим недавним опытом EntityFramework это уже не так много), как ORM для прямого доступа к базе данных. Теперь я столкнулся с необходимостью изменить многие части приложения, которые в настоящее время полагаются непосредственно на объекты EntitySpaces. Это нехорошо, но так оно и есть сейчас. Моя общая идея - представить слой, который вводит нейтральные объекты, сохраняющие несовместимые объекты, записывая какой-то интерфейс репозитория для получения, обновления и т. Д. Этих объектов и записи (первой) реализации, которая все еще использует EntitySpaces. Затем я мог бы реорганизовать все те классы и компоненты, которые в настоящее время используют EntitySpaces напрямую. Это, я надеюсь, позволит мне изменить реализацию репозитория позже, чтобы использовать веб-сервис или EntityFramework.Рефакторинг DAL с использованием DI, возможность изменения DAL позже
Вот мои вопросы/ненадежность:
Вообще, я хочу иметь один объект хранилища сидит где-то или лучше обеспечивают компоненты завода, который возвращает (конкретный) репозиторий? Возможно, я мог бы даже разделить репозиторий на разные интерфейсы для разных видов объектов, что приведет к некоторым 20-истным интерфейсам, которые я предполагаю.
Допустим, у меня есть компоненты пользовательского интерфейса, которые теперь выполняют множество операций с базой данных. Если я переписал их для работы с репозиторием, лучше ли «предоставить» этим компонентам объект репозитория или переписать эти компоненты пользовательского интерфейса так, как им даже не нужно знать, что где-то есть репозиторий? Представьте, что есть диалоговое окно, которое позволяет загружать Part
из базы данных, изменять его и отправлять обратно. Это можно рассматривать как своего рода интерфейс PartEditor
, который может быть просто вызван обратными вызовами для использования, когда пользователь нажимает на кнопку . Обновление или Удалить.
Вы бы даже использовали рамки DI для этой задачи? Приложение относительно большое, около 800 тыс. Локусов, я думаю, без повторных системных библиотек. Альтернативой было бы просто скрыть конкретные классы от всех компонентов, не используя рамки DI, чтобы избежать появления новых проблем. Для компонентов, использующих мои новые абстракции, это не должно меняться, так как эти компоненты должны быть написаны так, что им не нужно знать используемую инфраструктуру DI, правильно?
Я знаю, что это довольно абстрактно и, может быть, трудно ответить, но я надеюсь, что у других есть некоторый опыт в этой задаче. Я благодарен за любые указатели. Что касается вопроса о том, какие рамки DI использовать, im полностью открывается.
Особая благодарность за ссылку, я рассмотрю ее. – Jobo