Трудно ответить на этот общий вопрос, не зная предметную область достаточно хорошо.Я бы начал с размышлений о том, где наиболее вероятны будущие изменения, и попытался бы понять, где требуется гибкость.
Моя следующая мысль - всего лишь предложение.не стесняйтесь рассматривать их и изменять / игнорировать то, что, по вашему мнению, не имеет значения.
отделение DAL от BLL - почти всегда хорошая идея.схема данных - это одна вещь, которая должна быть инкапсулирована и скрыта от остальной части приложения, поэтому оставьте свои DataTables, DataSets, ORM или любые другие решения скрытыми в DAL.BLL (и слои над ним) должны использовать простые типы данных (то есть простые классы).Я думаю, что было бы неплохо поместить эти классы в библиотеку классов Model, которая не имеет ссылок и может использоваться везде.
такое ощущение, что у вас слишком много слоев ... действительно ли вам это нужнокласс Customer в BLL и еще один на прикладном уровне?могло бы быть, но я бы об этом подумал и дважды подумал.
Из моего опыта в одном из моих недавних проектов (веб-сайт о погоде с 200K уникальных посетителей в день) мы использовали link2sql для доступа к данным (в основном для чтениятолько данные) и простые классы данных во всем нашем приложении ASP.Net MVC (конечно, как часть моделей / моделей представлений).это работало довольно гладко, и мы могли легко изменить схему данных, не разбивая другие слои.
что касается вашего последнего вопроса о DataTables, эти объекты, если вы решите использовать их (я бы проголосовал), принадлежатисключительно в вашем DAL.они не должны подвергаться воздействию других слоев, так как это создаст связь с этим конкретным классом.что если завтра MS придумает класс намного лучше?Вы бы сейчас переключились, когда во всех своих проектах вы нашли множество ссылок на DataTables, его методы и свойства?было бы лучше просто изменить свой DAL для работы с классом NewAwsomeDataTable, а остальная часть вашего приложения блаженно неосведомлена.
надеюсь, что это помогло:)