DAL Framework используется многими программами на нескольких компьютерах
В нашем проекте у нас много небольших программ, распределенных по нескольким компьютерам, каждая из которых отвечает за определенные задачи с устаревшей базой данных. Сегодня они написаны на Fortran 77 и используют очень устаревшую платформу для доступа к базе данных.
Мы подумываем о том, чтобы начать разработку на C# и выяснить, как лучше всего создать структуру базы данных, которую могут использовать все приложения. Мы не можем использовать какие-либо существующие фреймворки, когда старая база данных реального времени не поддерживает SQL.
Я думаю о создании DAL с T4 из определения базы данных. Однако проблема, которую я вижу, заключается в том, что происходит, когда база данных изменяется и DAL необходимо перекомпилировать. Достаточно ли скопировать файл dll, содержащий DAL, на все компьютеры, или мы должны перекомпилировать приложения?
Фактическая структура базы данных меняется не так часто. Тем не менее, многие постоянные поиска регулярно меняются. Обычно никакие константы не удаляются, но они могут получить новые значения или могут быть добавлены новые. И если есть какая-либо константа, которая удаляется, программы, которые ее используют, все равно должны быть переписаны.
Я боюсь, что это может стать проблемой обслуживания и искать лучшее решение.
редактировать
Первичные ключи не являются постоянными в базе данных, но создаются один раз в год. Чтобы программы могли найти правильную строку в базе данных, используются константы поиска. В существующих программах константы используются непосредственно в коде в виде <TableName(RowName)>
, Затем константы заменяются на текущее значение первичного ключа препроцессором. Это означает, что все приложения должны быть перекомпилированы при перестройке базы данных.
Поэтому невозможно использовать, например, GetByKey(int key)
в BLL как ключ не является константой. Я вижу ряд различных решений для этого, перечисленных ниже, которые являются хорошими, а какие плохими? Пожалуйста, скажите мне, если вы видите какие-либо другие лучшие решения:
Определите постоянную поиска в DAL:
BLL.TableName.GetByKey (DAL.TableNameLookup.RowName)
- Плюсы: константа, которую я определил в DAL, и мне не нужно заменять BLL, если поиск изменился.
- Минусы: подробный синтаксис
Определите поиск в BLL:
BLL.TableName.RowName
- Плюсы: простой синтаксис
- Минусы: мне нужно обновить BLL при изменении констант поиска.
Это может быть решено как с помощью генерации кода (T4), так и DynamicObject. Om DynamicObject используется, константы могут быть определены в файле XML, который может быть легко обновлен. Тем не менее, это будет значительно медленнее.
Я не думаю, что любой из этих способов хорош. Пожалуйста, помогите мне придумать что-нибудь получше.
1 ответ
Используйте еще один уровень между DAL и приложением (например, BL-Business Layer)
Вызовите методы уровня DAL в BL, а из приложения вызовите уровень BL. Делая это, вы можете избежать зависимости между DAL и Application. Затем, когда вы делаете изменения в базе данных, меняются только DAL Layer и заменяют dll. Нет необходимости компилировать приложение при каждом изменении в DAL.