Недавно я начал новый проект webforms и решил отделить бизнес-классы от любых ссылок DBML. Мои классы бизнес-уровня вместо этого обращаются к дискретным методам уровня данных и возвращаются коллекциями DTO. Таким образом, слой данных может проектировать DTO следующим образом:
(from c in dataContext.Customers
where c.Active == true
select new DTO.Customer
{
CustomerID = c.CustomerID,
Name = c.CustomerName,
...
}).ToList()
Хотя создание объектов DTO добавляет работу, это похоже на лучший подход к жесткой привязке между уровнями Business and Data и означает, что я могу тестировать уровень Business без присутствия базы данных.
Мой вопрос в том, является ли это хорошей практикой? Есть ли способ генерации DTO (может быть, через SQLMetal) и какие другие проблемы могут возникать при продвижении проекта.