Этот сайт дал мне много полезных ответов, однако после нескольких часов поиска я не нашел ничего, что конкретно отвечало бы моим потребностям. Итак, начнем ...
Компания, в которой я работаю, находится в процессе разработки нового уровня бизнес-объектов и уровня доступа к данным - они будут находиться в отдельных сборках.
Проблема в том, что мне трудно понять взаимодействие между этими двумя уровнями - в частности, если DAL знает о BOL, я читал множество статей, в которых говорилось, что порядок зависимостей должен выглядеть примерно так:
GUI / Презентация -> BOL ---> DAL
Но насколько я понимаю, DAL нужна ссылка на BOL, чтобы иметь возможность «возвращать» объекты на уровень BOL.
Я собираюсь создать промежуточную сборку между BOL и DAL, которая будет в основном тонким слоем, заполненным интерфейсами для разделения этих двух DLL, поэтому фреймворк может использовать разные DAL, если возникнет необходимость.
Это привело меня к идее введения еще одного тонкого слоя с набором интерфейсов, которые реализуют BO, затем, когда BOL вызывает интерфейс DAL, он передает ему объект, который реализует один из этих интерфейсов BO, а затем DAL приступает к заполнению объект. Это устраняет все зависимости между BOL и DAL - однако мне трудно это оправдать, если честно.
В идеале мы хотели бы использовать ORM, поскольку он просто устраняет необходимость писать материал CRUD, но у наших клиентов есть привычка возиться с длиной столбцов в своей базе данных, и это является причиной большинства наших ошибок на сегодняшний день с использованием строго типизированных таблиц данных . Я слышал, что Linq2SQL также сохраняет длину столбцов во время компиляции, не уверен, что это делает NHibernate (но я не уверен, что наша схема базы данных разработана достаточно чисто для NHibernate, подводные камни работы с устаревшими системами).
Так что да, любое понимание взаимосвязи между BOL и DAL было бы очень желанным - извиняюсь, если выше написано плохо, если кому-то нужны разъяснения, я буду рад предоставить более подробную информацию.
Марлон