2010-02-16 2 views
6

В настоящее время мы приступаем к замене стека ADO.NET в нашем приложении C# Linq.Стратегии замены системных объектов

Поскольку приложение не было архивировано с уровнем абстрагирования данных, существуют вызовы ADO практически на каждом уровне приложения до такой степени, что разделение одного объекта и попытка его преобразования в Linq означает, что вы запускаете лабиринт кроличьих дыр.

Что я прошу, являются стратегиями или подходами к решению таких оптовых системных изменений, обеспечивая при этом надлежащее тестирование и минимальный период отброса инструмента «отбрасывания» (шельф делает изменения в момент уведомления и возвращается к нему позднее Дата).

Мы забавлялись следующее:

  • Создание зеркального объекта каждого объекта с новым кодом = есть для поддержания 2 кода базы до полного преобразования
  • Prefix всех имен функций функций ADO с ADO_ и создать версии Linq с оригинальным именем
  • Имейте FLAG системы, чтобы указать, следует ли использовать ADO или Linq и обернуть каждый вызов ADO, если if (FLAG) {ADO} else {Linq} = должен вернуться после преобразования и удалить все ADO refs

Каждое предложение до сих пор достойно съежиться.

Что вы, ребята, предлагаете?

ПРИМЕЧАНИЕ: Я удалил '(ADO to Link)' из заголовка, потому что я ищу более общие ответы и методы, а не только для преобразования ADO в Linq, используемого в качестве примера здесь.

ответ

3

Прежде чем вносить изменения, вы должны иметь автоматические модульные тесты. Фактически, вы не должны вносить изменения в код, который не распространяется на модульные тесты не менее 80%.

В реальном мире модульные тесты часто не существуют. С другой стороны, выполнение любого рефакторинга без модульных тестов может полностью испортить ваш код, что делает Менеджмент еще менее вероятным, чтобы вы вносили изменения в будущем. Что делать?

С помощью инструмента, такого как ReSharper, вы можете начать с применения некоторых «более безопасных» рефакторингов. С осторожностью нет причин, по которым вам не удастся многократно использовать «Метод извлечения», чтобы переместить ADO.NET в отдельные методы, «Сделать метод Static», если он еще не был статичным, либо «Переместить метод» или «Сделать метод нестатический», чтобы переместить метод в отдельный класс.

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

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

После того, как вы получили надлежащим образом код, , затем, вы можете реорганизовать код, чтобы иметь смысл, а затем изменить его, чтобы он использовал LINQ, если хотите.

2

Вы все еще можете использовать все свои хранимые процедуры/функции, созданные для вашего решения с помощью Linq2SQL. Используя что-то вроде стратегий, выраженных в «Микель Перо» Working with Legacy Code, вы можете создавать границы вокруг областей приложения и обновлять их в пределах этих границ.

Стратегия, которую я использовал в прошлом, это поддерживать/игнорировать базу данных и ее объекты. Затем я медленно повторяю различные вызовы ADO и заменяю вызовы Linq2SQL, пока все приложение не использует Linq2SQL. Затем мне легче преобразовать предыдущие вызовы ADO, которые отображали и передавали DataSets/DataTables в более подходящие объекты.

Другой подход (для DataSet/DataTable тяжелых решений), чтобы сохранить АДО звонки на месте, и вместо того, чтобы использовать методы расширения AsQueryable() и/или OfType<T>() для преобразования DS/DT элементы в соответствующие объекты, затем агрегировать эти изменения в более сплоченный DAL.

Смежные вопросы