Во-первых, я не думаю, что это смущающий основной вопрос n-уровня.
Это очень интересная тема, и я попытался стимулировать обсуждение на старых Subsonic Forums.
Я разделяю ваше нежелание выставлять мой уровень графического интерфейса в DAL.
Мой уровень графического интерфейса взаимодействует только с BLL, используя словарь и темы моей собственной модели сущностей, и возвращает только мои собственные сущности или списки, а в некоторых случаях таблицы данных.
Мой BLL общается только со слоем MAPping, который сопоставляет выборки, сохранения и т. Д. С соответствующими методами DAL CRUD и преобразует возвращенные типы Subsonic в типы моих сущностей.
При этом я был удивлен тем, сколько Subsonic мне пришлось продублировать, и время от времени я чувствовал, что иду по неправильному пути, теперь я чувствую себя более комфортно, хотя он все еще нуждается в рефакторинге и переработке. *
Например, поиск гибкого универсального средства указания моему BLL, какие строки я хотел вернуть в выборке, был проблемой, которой я не ожидал, и я закончил написание универсального класса queryClass с плавным интерфейсом, который выглядит очень похоже на дозвуковой выбор.
FWIW, я думаю, что вы движетесь по правильному пути, я думаю, что вы должны сделать, хотя решить, как вы хотите определить эти Subsonic типы для вашего GUI.
У Роба интересное обсуждение , которое может вас заинтересовать.