Пожалуйста, порекомендуйте план миграции сайта asp.net на трехслойную архитектуру. - PullRequest
3 голосов
/ 14 июля 2011

У меня есть сайт ASP.NET, который я создал и который значительно вырос в размерах и сложности.Я не создавал DAL или BLL в начале, потому что я был новичком и решил, что для меня это проще.Вместо этого я использовал много SqlDataSources и поместил всю бизнес-логику в коде для соответствующих страниц.Это была чертовка учебного проекта.Но со временем я неуклонно добавлял функции, в то время как использование сайта значительно возросло.Теперь я нахожусь с чем-то, что стало громоздким в обслуживании.Некоторый рефакторинг определенно в порядке.

Я хотел бы начать разделять мой пользовательский интерфейс, бизнес-логику и код доступа к данным.Я взял книгу Фаулера, а также прочитал достаточно онлайн, чтобы понять, что это хорошая вещь.Моя проблема в том, что большинство примеров и учебных пособий предполагают, что читатель начинает с нуля.Мне нужно составить план, чтобы выполнить это методично.И мне нужно делать это таким образом, чтобы я мог продолжать учиться и развивать навыки по ходу дела.

Итак, учитывая все это как контекст, мой вопрос заключается в том, как мне разбить эту задачу на куски.размер кусков?Например, я должен начать с замены всех этих элементов управления SQLDataSource новым слоем?Или я должен начать с создания некоторых сохраненных процедур?Или, может быть, я должен сначала перейти на Linq.Вы, наверное, уже поняли идею.То, что я ищу, - это ответ, который предписывает последовательность небольших пошаговых шагов, которые я могу использовать в качестве своей дорожной карты.Спасибо!

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Я бы не начал с DAL, ваш код, вероятно, не станет намного понятнее, но вам придется реализовать всю инфраструктуру DAL и связать ее с вашим кодом asp.net, много работы. Идеальным способом было бы начать с модульных тестов, но я полагаю, это не так просто, если ваш код не организован хорошо.

Сначала я попытаюсь извлечь бизнес-логику для разделения слоя, для этого вам потребуется думать, будто вы строите с нуля. Бьюсь об заклад, это заставит вас захотеть намного реорганизовать процесс. Вы можете начать с создания отдельного проекта библиотеки классов и начать извлекать логику со всем необходимым кодом доступа к данным.

Когда ваш уровень пользовательского интерфейса свободен от всего, кроме логики представления, тогда пришло время реорганизовать ваш новый BLL. Выберите правильную абстракцию для своего DAL (например, Unit of Work), чтобы вы могли легко написать Unit and Integration Tests.

Тогда напиши много тестов. И тогда вы готовы действительно начать рефакторинг вашего кода:)

Смысл в том, чтобы не пытаться сразу выполнить слишком много рефакторинга с самого начала, просто переместить код, чтобы все стало более понятным и разделенным. В таких сценариях всегда происходит небольшое изменение сознания.

0 голосов
/ 14 июля 2011

С архитектурной точки зрения вы можете разбить ваш код на использование шаблона MVC:

  1. Поместите ваши компоненты SQL в слой доступа к данным, например, вы можете использовать EF.
  2. Поместите свою логику в слой контроллера.
  3. Поместите все свои элементы управления / представления пользовательского интерфейса в слой представления.

То, как они собираются общаться, это вашконтроллеры будут обрабатывать данные, извлеченные из уровня доступа к данным (например, выполнить некоторые вычисления и т. д.), затем контроллеры передадут эти значения в (связанные) представления или просто поместят: уровень доступа к данным <---> controller <--> view

Вот несколько советов о том, как выполнить рефакторинг вашего кода на основе приведенного выше плана:

  • Прежде всего, создайте несколько модульных тестов из существующего кода, даже если выВероятно, не смог бы макетировать все, как из вашего описания, кажется, что код тесно связан.Убедитесь, что модульные тесты прошли все необходимые случаи.
  • Во-вторых, отделите ваш SQL-запрос от вашей логики и уровня доступа к данным.Обновите ваши модульные тесты, если необходимо, и запустите их снова, чтобы убедиться, что ваши изменения не вызывают ошибок.
  • В-третьих, отделите свою логику от ваших представлений (UI).Мы назовем это вашим уровнем контроллера.Обновите свои юнит-тесты (если вы юнит-тестирование пользовательского интерфейса).
  • И последнее, но не менее важное: вам необходимо реорганизовать элементы бизнес-логики на уровне контроллера, чтобы они следовали принципам ОО.Вы можете использовать некоторые шаблоны проектирования, чтобы сделать ваш код менее связанным и более расширяемым, поэтому, если вам придется добавлять некоторые элементы в будущем, они не повлияют на ваш существующий код.Затем обновите свои модульные тесты и убедитесь, что они прошли.

Проведение модульных тестов очень важно перед рефакторингом, чтобы убедиться, что ваши изменения не нарушают код и / или не создают новых ошибок.

Спасибо.

0 голосов
/ 14 июля 2011

Начните с создания слоя DAL, содержащего все запросы, а затем переместите на него весь свой код доступа к данным. Позже вы можете решить, в зависимости от сложности, использовать ли хранимые процедуры и т. Д. Объедините это с вашим текущим пользовательским интерфейсом (который также имеет бизнес-код), чтобы проверить, что все в порядке. убедитесь, что у вас есть правильный код для обработки соединений и объектов.

Затем переместите весь код бизнес-логики в свой BAL.

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