DAL нужна ссылка на BOL, чтобы он мог заполнять объекты. То, что вы не хотите иметь, - это какая-либо ссылка или связь от BOL обратно к DAL - это приводит к тому, что ваша BOL будет связана с конкретной реализацией базы данных. Когда вы думаете об этом, это имеет смысл. Ваш DAL знает подробности о бизнес-объектах вплоть до уровня свойств и о том, как извлечь их данные из базы данных - конечно, DAL по своей природе тесно связан с BOL. Таким образом, ссылка на этот путь в порядке. А если подумать, что на другой стороне? База данных. «Тесная связь» между данными вашего объекта и вашей базой данных? Да, это чертовски сложно. Понятие не очень даже значимое.
Это все другое направление, где вам нужно отделиться. Так что да, если нет прямой связи между DAL и BOL, вы можете изменить свою платформу данных в любое время.
Нет особого смысла в создании интерфейсов для BO и передаче их в DAL в этом сценарии. Однако иногда вам может понадобиться пойти другим путем. Как правило, бизнес-объектам не нужно ничего знать о том, как они создаются или сохраняются.
На практике даже с большинством ORM, например, создание бизнес-уровня, полностью свободного от каких-либо постоянных артефактов, может стать очень трудным, а иногда и фактически невозможным. Поэтому иногда у вас есть кое-что, что слишком сложно обойти, хотя, и вы можете обнаружить, что строго избегание знания каких-либо данных в BO ведет к чрезмерной сложности, которая ухудшает, а не увеличивает ценность.
Если вы чувствуете, что нет лучшего способа и вам необходимо что-то сохранить из BOL, создайте простой интерфейс, чтобы функциональные возможности DAL могли быть переданы в BOL. Таким образом, вы по-прежнему можете отделить BOL от конкретной реализации базы данных.
Кроме того, хотя это и дополнительная работа, если это не очень простое одноразовое приложение, я настоятельно рекомендую добавить еще один слой между пользовательским интерфейсом и BOL. Шаблон MVP (Model-View-Presenter) - это шаблон проектирования общего назначения для уменьшения связи между основным приложением и пользовательским интерфейсом. У докладчиков много вариантов, не слишком увлекайтесь конкретными деталями, просто начните с простого MVP, если вы никогда его не использовали.
Шаблоны не так сложны, просто пользовательский интерфейс настолько запутан, что может потребоваться хотя бы пара основных итераций / приложений, прежде чем вы почувствуете, что код, который вы пишете в любое время, работает систематически и методично отделить пользовательский интерфейс. Просто продолжайте работать над этим, начните приобретать арсенал приемов и не зацикливайтесь на том факте, что вы действительно еще не достигли четкого чистого разделения. Все, что вы изучаете и можете сделать, что даже немного способствует созданию четкой границы в пользовательском интерфейсе, является большим шагом в правильном направлении.