По моему мнению, доступ к данным является одним из наиболее важных аспектов, чтобы отделить / абстрагироваться от остальной части вашего кода.
Разделение различных «слоев» имеет несколько преимуществ.
1) Он аккуратно организует вашу кодовую базу. Если вам нужно внести изменение, вы сразу узнаете, где нужно внести изменение и где найти код. Это может не иметь большого значения, если вы работаете над проектом самостоятельно, но с большой командой преимущества могут быстро стать очевидными. Этот пункт на самом деле довольно тривиален, но я все равно добавил его. Настоящая причина - номер 2 ..
2) Вы должны попытаться отделить вещи, которые могут потребоваться изменить, независимо друг от друга. В вашем конкретном примере вполне возможно, что вы захотите изменить логику доступа к БД / данным, не влияя на пользовательский интерфейс. Или вы можете изменить пользовательский интерфейс, не влияя на доступ к данным. Я уверен, что вы можете увидеть, как это невозможно, если код смешан друг с другом.
Когда ваш уровень доступа к данным имеет четко определенный интерфейс, вы можете изменять его внутреннюю работу так, как вам хочется, и, пока он все еще придерживается интерфейса, вы можете быть почти уверены, что он не сломает ничего дальше. Очевидно, что это все еще нужно проверить с помощью тестирования.
3) Повторное использование. Написание кода доступа к данным может стать довольно повторяющимся. Это еще более повторяется, когда вам нужно переписать код доступа к данным для каждой страницы, которую вы пишете. Всякий раз, когда вы замечаете что-то повторяющееся в коде, должны звучать сигналы тревоги. Повторяемость, подвержена ошибкам и вызывает проблемы с обслуживанием.
Я уверен, что вы видите одинаковые запросы, появляющиеся на разных страницах? Эту проблему можно решить, поместив эти запросы ниже на уровне данных. Это помогает облегчить обслуживание; всякий раз, когда имя таблицы или столбца изменяется, вам нужно только исправить одно место в слое данных, которое ссылается на него, вместо того, чтобы проскальзывать через весь пользовательский интерфейс и потенциально что-то упустить.
4) Тестирование. Если вы хотите использовать автоматизированный инструмент для проведения модульного тестирования, вам нужно все красиво разделить. Как вы будете проверять свой код, чтобы выбрать все записи о клиентах, когда этот код разбросан по всему интерфейсу? Это намного проще, когда у вас есть особая функция SelectAllCustomers для объекта доступа к данным. Вы можете проверить это один раз здесь и быть уверенным, что он будет работать для каждой страницы, которая его использует.
Есть и другие причины, которые я позволю другим людям добавить. Главное, что нужно убрать, это то, что разделение слоев позволяет одному слою меняться, не позволяя изменениям распространяться на другие слои. Поскольку база данных и пользовательский интерфейс являются областями приложения / веб-сайта, которые наиболее часто меняются, очень полезно держать их отдельно и красиво отделенными от всего остального и друг от друга.