Структурирование вашего кода определенно поможет вам со 2 и 3, и если все сделано правильно, 1 тоже не пострадает. Поскольку вы включаете сторонние ORM, вам будет легче добиться хорошей производительности, поскольку такие функции поддержки ORM, как кэширование и отложенная загрузка «из коробки».
Я бы посоветовал вам попытаться реорганизовать ваше приложение небольшими шагами, одновременно добавляя новые функции или исправляя ошибки, избегая, таким образом, огромных проектов по рефакторингу, которые трудно оправдать и управлять.
Я бы сказал, что хорошим способом использования ORM сторонних разработчиков является организация вашего существующего кода и запросов аналогичным образом. Итак, вы можете ввести класс ProductRepository, который имеет метод find (), инкапсулирующий существующий запрос, и возвращает ResultSet. Далее следует ввести класс данных продукта (класс только с полями и без методов). Класс продукта должен отображать таблицу Product в БД. Теперь find должен вернуть массив Products. Метод find () теперь сначала преобразует ResultSet в массив Products и возвращает массив. Код клиента должен быть изменен соответствующим образом. Наконец, вы начинаете заменять ваши пользовательские запросы внутри метода find () делегированием в ORM. Клиенты, использующие репозиторий, не должны обнаруживать изменения. Класс данных Product является семенем слоя модели. По мере продвижения вы можете добавить к нему поведение и создать слой реального домена.
Возвращаясь к вашему вопросу, я бы сказал, что вы сначала группируете свой существующий код в виде пользовательской активной записи (я предлагаю Repository, но в конце концов это просто вопрос организации), а затем вы вводите ORM. Так что это не ситуация или ситуация, а первый и второй этап рефакторинга.
Я бы подошел к этому следующим образом:
- Сначала напишите несколько автоматических тестов
- Попробуйте разделить код на разные слои: презентация, домен, постоянство.
- Выполните рефакторинг, как описано в предыдущем разделе.
Внедрение полноценного многоразового использования ORM - большая работа, поэтому я предлагаю вам включить существующий и начать вводить его небольшими шагами.
Я описал этот подход довольно подробно в моей книге «Профессиональный рефакторинг в C #», и вы можете загрузить образец кода, который проведет вас через здесь .