Позвольте мне увидеть, если я могу показать вам лучший способ, чтобы думать об этом
у вас есть свой доступ к данным (SQL Server, MySQL, плоские XML-файлы и т.д.), все это должно быть абстрагируются ничего в вашем приложении должны заботиться или знать, как вы получаете свои данные, только то, что оно дозирует, если что-то еще знает, как вы получаете свои данные, у вас есть нарушение уровня. если доза DAL ничего другого, то получить данные у вас есть нарушение уровня. Затем вы реализуете интерфейс доступа к данным, похожий на IDAL, который использует ваш бизнес-уровень, это очень важно для проверки вашего кода, заставляя вас отделять ваши слои.
Ваши объекты данных могут быть помещены в пространство имен DAL или дать им свое собственное, давая им собственное разделение сил. Объекты данных являются немыми объектами и должны содержать очень мало и не содержать никакой логики и знать только о себе и данных, которые они имеют, ОНИ НЕ СОДЕРЖИЛИ БИЗНЕС-ЛОГИКУ !, ДОСТУП ДАННЫХ LOCIC или UI LOGIC. если они у вас есть нарушение уровня. Единственная функция объекта данных - хранить данные и передавать их с одного уровня на другой.
Уровень Biz реализует интерфейс доступа к данным, такой как IDAL, о котором мы говорили, прежде чем вы сможете его создать с помощью фабрики, контейнера IOC или всего остального, не соответствующего конкретному типу, но добавьте свойство setter, чтобы это можно было изменить для тестирования , Уровень Biz только обрабатывает бизнес-логику, он не знает или не заботится о том, откуда поступают данные или где он идет, он только заботится о том, чтобы манипулировать данными, чтобы соответствовать бизнес-правилам, это включало бы проверку даты, фильтрацию (часть этого сообщая DAL, какие данные ему нужны, дайте DAL выяснить, как это получить). В основном BIZ обрабатывает всю логику, которая не связана с пользовательским интерфейсом или связанными с поиском данных. Так же, как DAL, Biz должен реализовать интерфейс по той же причине.
Уровень пользовательского интерфейса Вызывает доступ к уровню Biz так же, как и уровень доступа к DAL по той же причине. Все слои пользовательского интерфейса заботятся о отображении данных и получении данных от пользователя. Уровень IU не должен знать ничего о бизнес-правилах, за исключением исключения данных, необходимых для заполнения данных.
Преимущество этой архитектуры заключается в том, что она разъединяет заботу, облегчая ее тестирование, более гибкую и удобную в обслуживании. Сегодня вы строите веб-сайт, но завтра вы хотите, чтобы другие могли интегрировать vi в веб-службу, все, что вам нужно сделать, это создать веб-сервис, который реализует интерфейс IBIZ и ваше завершение, когда вам нужно исправить ошибку в BIZ слой, он уже исправлен как на вашем веб-сайте, так и на веб-сервисе.
Принимая это на следующий уровень, можно сказать, что вы делаете много тяжелых хрустов, и вам нужны более мощные серверы, чтобы справиться с этим, поэтому вам нужно реализовать интерфейс IDal и IBIZ, которые действительно являются оболочками для WCF который обрабатывает связь между вашими серверами, теперь ваше приложение распределяется между несколькими серверами, и вам не нужно было менять свой код, чтобы сделать это.
Меня беспокоит то, что я хотел, чтобы все они были объединены в один объект. Это позволяет рекурсии и т. Д., Если это необходимо. Подобно навигации вверх и вниз по диаграмме org. В противном случае я либо должен поддерживать два объекта, либо получить свой код для обоих, а затем сохранить хеш-таблицу в записи, доступной для записи. – klkitchens
Вы можете сделать это таким образом, но вы бы обменивались удобством, которое рекурсия приносит для более высокой степени сцепления. Вместо того, чтобы пользовательский интерфейс зависел исключительно от BL, теперь у вас есть объекты Entity, вторгающиеся в роль BL. В будущем это изменит ситуацию. Это компромисс. – Welbog
В конечном счете это зависит от вас, но большую часть времени вы захотите избежать как можно большего сочетания. – Welbog